Java数组读取循环永远不会结束?

时间:2015-04-23 07:08:39

标签: java arrays loops

您好我是编程的新手,今天我正在为一个Java数组任务编写代码,并且在开始时我试图测试我所做的和第一个for循环(数组读取)程序不会停止即使我已经输入了一个数字(n)的长度。请帮帮忙?

import java.util.Scanner;


public class ReadTwoElementsForArrayAndSum {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Scanner in = new Scanner(System.in);

        System.out.println("Please enter N element:");
        int n = in.nextInt();

        System.out.print("Please enter K element, for k < N: ");
        int k = in.nextInt();

        int[] arrayN = new int[n];
        System.out.print("Please enter N numbers for the array:  ");

        for(int i = 0; i < arrayN.length; i++) {
            arrayN[i] = in.nextInt();
        }
        boolean changed = false;
        do {
            int temp = 0;           
            for( int i = 0; i < (arrayN.length-1); i++) {
                if(arrayN[i] > arrayN[i+1]){
                    temp = arrayN[i];
                    arrayN[i] = arrayN[i+1];
                    arrayN[i+1] = temp;
                    changed = true;

                }
            }
         } while (changed);
         for(int i = 0; i < arrayN.length; i ++) {
            System.out.printf("%d", arrayN[i]);
            System.out.print(k);
        }


        in.close();


    }

}

3 个答案:

答案 0 :(得分:0)

循环是无限的,因为一旦for循环中的if条件被执行,那么changed被设置为true并且它的值永远不会变为false,从而导致无限循环do while循环。

相反,您可以使用Arrays.sort(arrayN),或者如果您只想使用循环,请尝试以下代码

 int count = 0;
 do {
    int temp = 0;
    count++;
    for (int i = 0; i < (arrayN.length - 1); i++) {
        if (arrayN[i] > arrayN[i + 1]) {
            temp = arrayN[i];
            arrayN[i] = arrayN[i + 1];
            arrayN[i + 1] = temp;


        }
    }
 } while (count < (arrayN.length));

Demo

答案 1 :(得分:0)

在这个循环中:

    do {
        int temp = 0;           
        for( int i = 0; i < (arrayN.length-1); i++) {
            if(arrayN[i] > arrayN[i+1]){
                temp = arrayN[i];
                arrayN[i] = arrayN[i+1];
                arrayN[i+1] = temp;
                changed = true;

            }
        }
     } while (changed);

您曾将changed更改为true,并且永远不会将其false更改为changed。如果你想要结束你的循环,你必须知道如何(这取决于你的方法)使onsubmit为假,这样它就可以结束循环。

答案 2 :(得分:0)

你应该在do-while循环中做什么

boolean flag=true;
do{
     (some condition){
         flag=false;
     }

}while(flag)

这会导致do-while循环的正确执行