我改变了我的程序。新问题是执行不会停止!
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package inplacesort;
import java.util.*;
/**
*
* @author ASUS
*/
public class InplaceSort
{
static Scanner console = new Scanner(System.in);
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
Vector <Integer> intList = new Vector <Integer> ();
//getting the numbers from the user
char ans = 'y';
while (ans == 'Y' || ans == 'y')
{
System.out.print("Enter a Number: ");
intList.addElement(console.nextInt());
System.out.print("Do You Want to Continue?(Y/N)");
ans = console.next().charAt(0);
}
System.out.println(intList);
for (int i = 1; i < intList.size(); i++)
{
//if (intList.elementAt(i) < intList.elementAt(i-1))
//{
int j = i - 1;
while (j >= 0 && intList.elementAt(i) < intList.elementAt(j))
{
j--;
}
if (j == -1)
{
j = 0;
}
for (int k = intList.size() - 1; k >= j; k--)
{
intList.insertElementAt(intList.elementAt(k),k + 1);
}
intList.insertElementAt(intList.elementAt(i+1),j);
intList.removeElementAt(i+1);
//}
}
System.out.print(intList);
}
}
答案 0 :(得分:2)
如果没有堆栈跟踪,我不知道这是否是您遇到的具体问题,因为我看到了一些看起来有些偏差的事情。这绝对是错误的:
while(intList.elementAt(i) < intList.elementAt(j))
{
if (j < 0)
{
break;
}
j--;
}
你递减j,然后你在j处获取元素,然后你检查&lt; 0已经使用过它。
答案 1 :(得分:1)
您的内部while
周期会减少变量j
,而不会检查它是否为负数。索引数组和Vector
的负索引无效。
至少将j >= 0
添加到条件中:
while(j >= 0 && intList.elementAt(i) < intList.elementAt(j))
{
if (j < 0)
{
break;
}
j--;
}
此后,内部if
不再需要如此简单:
while (j >= 0 && intList.elementAt(i) < intList.elementAt(j))
j--;
答案 2 :(得分:1)
这是由于(int i = 1; i&lt; =(intList.size()) - 1; i ++)你用1初始化i并再次用1减去列表大小
package test;
import java.util.*;
public class InsertionSort
{
static Scanner console = new Scanner(System.in);
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
Vector <Integer> intList = new Vector <Integer> ();
//getting the numbers from the user
char ans = 'y';
while(ans == 'Y' || ans == 'y')
{
System.out.print("Enter a Number: ");
intList.addElement(console.nextInt());
System.out.print("Do You Want to Continue?(Y/N)");
ans = console.next().charAt(0);
}
for (int i = 0; i <intList.size(); i++)
{
if (intList.elementAt(i) < intList.elementAt(i))
{
int j = i - 1;
while(intList.elementAt(i) < intList.elementAt(j))
{
if (j < 0)
{
break;
}
j--;
}
intList.insertElementAt(intList.elementAt(i),j);
intList.removeElementAt(i);
}
}
System.out.print(intList);
}
}
答案 3 :(得分:0)
如果j小于1(或等于0),你的while循环应该会中断。然后你的代码工作正常:
while(intList.elementAt(i) < intList.elementAt(j))
{
if (j < 1)
{
break;
}
j--;
}
答案 4 :(得分:0)
这里的错误在线 while(j&gt; 0&amp;&amp; intList.elementAt(i)&lt; intList.elementAt(j))
您已指定 j&gt; = 0 ,当进入while循环时, j值为-1
纠正上面的错误,程序将执行,但你的排序有一些问题,因为它没有排序。
package com.example.poly;
/ * *要更改此许可证标题,请在“项目属性”中选择“许可证标题”。 *要更改此模板文件,请选择“工具”|模板 *并在编辑器中打开模板。 * /
import java.util。; / * * * @author华硕 * / 公共类InsertSort { static Scanner console = new Scanner(System.in);
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
Vector <Integer> intList = new Vector <Integer> ();
//getting the numbers from the user
char ans = 'y';
while(ans == 'Y' || ans == 'y')
{
System.out.print("Enter a Number: ");
intList.addElement(console.nextInt());
System.out.print("Do You Want to Continue?(Y/N)");
ans = console.next().charAt(0);
}
for (int i = 1; i <= (intList.size())-1; i++)
{
if (intList.elementAt(i) < intList.elementAt(i-1))
{
int j = i - 1;
while(j>0 && intList.elementAt(i) < intList.elementAt(j))
{
j--;
}
intList.insertElementAt(intList.elementAt(i),j);
intList.removeElementAt(i);
}
}
System.out.print(intList);
}
}