2015-04-23 33 views
0

嗨,我是编程新手,今天我正在编写一个Java数组任务的代码,并且在开始时我试图测试我已经完成了什么,并且在第一个for循环(数组读取)程序不停止读一个数字,即使我已经输入一个数字(n)的长度。请帮忙 ?因为一旦执行for循环if条件里面,然后changed设置为true和它的价值从未改变为假导致无限循环由while循环做Java数组读取循环永不结束?

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

是的的确控制不断进入这一行正确执行'改变=真;'如果它真的会导致do-while永远运行 – Vihar

+0

如果你想对数组进行排序,你可以使用Arrays.sort(arrayN);' – kaykay

回答

0

循环是无限的。

相反,你可以使用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

+0

谢谢,但我没有明白为什么我以前的循环是因为这样做而粉碎:( – Yordan

+0

@Yordan,因为你只是将'changed'的值更改为'true'而不是任何地方为false,做的时候执行无限次,因为它的条件是真的不是假的 – silentprogrammer

+0

谢谢,将知道它为下一个任务:) – Yordan

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); 

你一次改变changedtrue,永远不会让它false。如果你想结束你的循环,你必须做些什么(这取决于你的方法)使得changed错误,因此它可以结束循环。

0

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

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

}while(flag) 

这将导致do-while循环