执行不会停止java

时间:2014-09-11 11:42:20

标签: java

我改变了我的程序。新问题是执行不会停止!

/*
 * 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);
    }
}

5 个答案:

答案 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 Sc​​anner 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);
}

}