我的任务(来自Zybooks的Java课程简介)说:"写一个while循环,打印userNum除以2(整数除法),直到达到1.按空格跟踪每个数字。 userNum = 20的示例输出: 20 10 5 2 1
注意:此活动将执行四项测试,其中userNum = 20,然后使用userNum = 1,然后使用userNum = 0,然后使用userNum = -1。"
我可以打印" 20 10 5 2 1",但是当我成功地在上面的数字序列的末尾添加一个空格时,它不会添加空格到1当userNum = 1时。例如:" 1"而不是" 1" for userNum = 1.我现在只关注1和0和-1之后。此外,下面注释掉的while循环只运行一个无限循环,但我认为无论如何添加它都会很有用,对不起这个混乱。到目前为止,这是我的代码,非常感谢您提前:
import java.util.Scanner;
public class DivideByTwo {
public static void main (String [] args) {
int userNum = 0;
userNum = 20;
System.out.print(userNum);
while (userNum > 1) {
System.out.print(" " + (userNum/2));
userNum = userNum/2;
if (userNum == 1) {
System.out.print(" ");
}
}
/* while (userNum <= 1) {
System.out.print(" ");
userNum = userNum + 1;
}*/
System.out.println("");
return;
}
}
答案 0 :(得分:2)
您可以将此块移出while
循环 -
} // end of the while loop
if (userNum == 1) {
System.out.print(" ");
}
或者,您不需要if
,while (userNum > 1)
确保检查得到处理。
要使用现有代码,请更改为 -
while (userNum > 1) {
System.out.print(" " + (userNum/2));
userNum = userNum/2;
}
System.out.println(" ");
答案 1 :(得分:1)
在这个初学者计划工作5天后,我终于找到了解决方案。它首先检查userNum是否大于或等于1(如果它是-1或0(-1 / 2,0 / 2,没有打印),则打印出原始的userNum值(20,1然后,它将此值添加到空格中,重复该过程,然后打印新的userNum值(userNum / 2).while循环使此过程重复,直到该值不再是> = 1。它终于结束并打印了一个换行符。比我原来的想法简单得多:
while (userNum >= 1) {
System.out.print(userNum + " ");
userNum = userNum / 2;
}
System.out.println("");
return;
答案 2 :(得分:1)
public class DivideByTwo {
public static void main (String [] args) {
int userNum = 20;
while (userNum >= 1) {
System.out.print(userNum+" ");
userNum = userNum/2;
}
return;
}
}
如果您将userNum硬设置为20,则无需声明它然后分配值,您可以在同一行中执行此操作。
所以改变:
如果您更改while循环以检查(userNum >= 1)
,则循环将在其操作中包含数字1(如果我没有弄错,Java将向下舍入整数设置)。
所以会发生的事情是它会看到userNum大于或等于1,然后打印userNum和一个空格,直到该值小于1.
这应输出您之后的字符串。
但是如果它最后连续输出一个1 1 1 1 1 1 1 1的字符串,你可以使用floor()
函数来确保它向下舍入。
答案 3 :(得分:1)
这个while循环应该可以解决问题,而且非常简单。
while(true){
System.out.print(number + " ");
number = number / 2;
if(number==1){
break;
}
}
答案 4 :(得分:1)
你正在使用错误的循环; for
循环比while
循环更恰当。您的代码可以是:
System.out.print(userNum)
for (;userNum > 1; userNum /= 2)
System.out.print(" " + usernum);