2015-04-12 31 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) 
相关问题