java中的这个程序不会停止执行

时间:2014-09-11 14:25:39

标签: java

我编写了这个用于排序某些数字的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);
    }
}

2 个答案:

答案 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。因此,无限循环。