Java数组读取循环永不结束?
您好,我是编程新手,今天我正在为一个Java数组任务编写代码,一开始我只是尝试测试我所做的事情,在第一个for循环(数组读取)中,程序不会停止读取数字,即使我已经输入了一个数(n)作为其长度。请帮忙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
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