您好我是编程的新手,今天我正在为一个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();
}
}
答案 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));
答案 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循环的正确执行