Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java数组读取循环永不结束?_Java_Arrays_Loops - Fatal编程技术网

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

Java数组读取循环永不结束?,java,arrays,loops,Java,Arrays,Loops,您好,我是编程新手,今天我正在为一个Java数组任务编写代码,一开始我只是尝试测试我所做的事情,在第一个for循环(数组读取)中,程序不会停止读取数字,即使我已经输入了一个数(n)作为其长度。请帮忙 import java.util.Scanner; public class ReadTwoElementsForArrayAndSum { public static void main(String[] args) { // TODO Auto-generated

您好,我是编程新手,今天我正在为一个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();


    }

}
import java.util.Scanner;
公共类ReadTwoElementsForArrayAndSum{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
扫描仪输入=新扫描仪(系统输入);
System.out.println(“请输入N元素:”);
int n=in.nextInt();
System.out.print(“请输入K元素,对于KarrayN[i+1]){
温度=arrayN[i];
arrayN[i]=arrayN[i+1];
arrayN[i+1]=温度;
更改=正确;
}
}
}同时(改变);
for(int i=0;i
循环是无限的,因为一旦执行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));
int count=0;
做{
内部温度=0;
计数++;
对于(int i=0;i<(arrayN.length-1);i++){
if(arrayN[i]>arrayN[i+1]){
温度=arrayN[i];
arrayN[i]=arrayN[i+1];
arrayN[i+1]=温度;
}
}
}而(计数<(数组长度));

在此循环中:

    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);
do{
内部温度=0;
对于(int i=0;i<(arrayN.length-1);i++){
if(arrayN[i]>arrayN[i+1]){
温度=arrayN[i];
arrayN[i]=arrayN[i+1];
arrayN[i+1]=温度;
更改=正确;
}
}
}同时(改变);

您曾经将
changed
更改为
true
,但从未将其更改为
false
。如果你想结束你的循环,你必须知道如何(取决于你的方法)使
更改
为false,这样才能结束循环。

当循环结束时,你应该做什么

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

}while(flag)

这会导致正确执行do,而循环

yep控件是否会转到此行
changed=true
如果它执行while(true)将导致do while为ever运行如果您尝试对数组进行排序,您可以使用
Arrays.sort(arrayN)谢谢,但我不明白为什么我的上一个for循环会因为do while而崩溃:(@Yordan,因为您只将
的值更改为
true
而不更改为false,而do while会执行无限次,因为它的条件为true而不是false