我正在为即将进行的Java测试进行修订,而且我陷入困境,我无法解决它。
问:接受2个整数,从Int A到Int B,如果X可被6 OR 5整除,则不会两者都显示X,并且每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++;
}
答案 0 :(得分:2)
您的代码提供了无限循环,因为numOne
在while循环外增加 。只需将其移入内部,它似乎正常工作。
答案 1 :(得分: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 :(得分:1)
你的增量超出了while循环。你需要在循环体的末尾增加numOne。
目前你有一个无限循环。由于numOne永远不会改变,因此numTwo总是大于numOne。
同样使用独家OR ^
,这会使这个问题变得更简单:
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++;
}
答案 3 :(得分:1)
你也可以写:
if ((numOne % 5 == 0 || numOne % 6 == 0) && numOne % 30 != 0)