2015-04-12 50 views
0

我正在爲即將到來的Java測試進行修訂,而且我陷入了一個部分,我無法解決它。檢查兩個整數之間的數字

問:從Int A到Int B取整數2,如果X可以被6或5整除但不能同時爲2,並且在每10個數字後打印一個新行。

下面是我當前的代碼:

public static void main(String[] args) { 
    // TODO code application logic here 
    Scanner sc = new Scanner(System.in); 
    int numOne = sc.nextInt(); 
    int numTwo = sc.nextInt(); 
    int line = 1; 

    while (numTwo > numOne) { 

     if (line%11==0){ 
      System.out.println(""); 
     } 

     if ((numOne % 5 == 0) && (numOne % 6 != 0)) { 
      System.out.print(numOne + " "); 
      line++; 
     } 
     if ((numOne % 6 == 0) && (numOne % 5 != 0)) { 
      System.out.print(numOne + " "); 
      line++; 
     } 
    } 
    numOne++; 
} 

回答

2

更改代碼

while (numTwo > numOne) { 

     if (line%11==0){ 
      System.out.println(""); 
     } 

     if ((numOne % 5 == 0) && (numOne % 6 != 0)) { 
      System.out.print(numOne + " "); 
      line++; 
     } 
     if ((numOne % 6 == 0) && (numOne % 5 != 0)) { 
      System.out.print(numOne + " "); 
      line++; 
     } 
     numOne++; 
    } 

移動numOne++;內循環。你不改變循環內的任何變量,所以你會得到一個無限循環

2

你的代碼給出了一個無限循環,因爲numOne遞增 while循環。只需將其移入內部,它似乎可以正常工作。

+0

謝謝!我沒有意識到我把增量放在了外面 – gymcode

1

你的增量在while循環之外。您需要在循環體的末尾增加numOne。

目前你有一個無限循環。由於numOne從不改變,所以numTwo總是大於numOne。

還可以使用異或^,它會使這個問題變得簡單許多: http://www.programmerinterview.com/index.php/java-questions/xor-in-java/

while (numTwo > numOne) { 

    if (line%11==0){ 
     System.out.println(""); 
    } 

    if ((numOne % 5 == 0) && (numOne % 6 != 0)) { 
     System.out.print(numOne + " "); 
     line++; 
    } 
    if ((numOne % 6 == 0) && (numOne % 5 != 0)) { 
     System.out.print(numOne + " "); 
     line++; 
    } 
    numOne++; 
} 
1

你也可以這樣寫:

if ((numOne % 5 == 0 || numOne % 6 == 0) && numOne % 30 != 0)