我编写了这个用于排序某些数字的java程序。但它并没有停止执行。你能帮帮我吗?
package inplacesort;
import java.util.*;
public class InplaceSort
{
static Scanner console = new Scanner(System.in);
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("Before Sorting the Numbers: " + intList);
for (int i = 1; i < intList.size(); i++)
{
int j = i - 1;
while (j > 0 && intList.elementAt(i) < intList.elementAt(j))
{
j--;
}
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 :(得分:1)
你的问题是k&amp;中的intList.size()。我循环。这不像你期望的那样。当我调试你的代码时,k的值是425996。
编辑:
当我调试它时,我更多地看到了因为你在其中改变了向量,它自身的大小不断增加。如果让程序运行几分钟,则会出现内存不足错误。
请不要改变你正在循环的对象。要么制作它的副本,要么通过其中一个制作循环并改变另一个或从一个新的和一个开始。在循环旧版本的同时继续为其添加值。
System.out.println("Before Sorting the Numbers: " + intList);
List<Integer> sortList = new ArrayList<Integer>();
int minVal;
int index=0;
int size = intList.size();
for (int i = 0; i < size; i++)
{ minVal=Integer.MAX_VALUE;
for (int j = 0; j < intList.size(); j++)
{
if(intList.get(j) < minVal){
index=j;
minVal=intList.get(j);
}
}
intList.remove(index);
sortList.add(minVal);
}
System.out.print("After Sorting the Numbers: "+ sortList);
答案 1 :(得分:-1)
原因是因为j的值总是比i的值小1。因此,无限循环。