Java,偶数位数,奇数位数
这个程序本质上是一个游戏,用户必须输入数字以查看哪些数字是好的:偶数个偶数数字和奇数个奇数数字 首先,当我输入一位数字时,程序结束,这不是故意的。我假设这和while有关(Java,偶数位数,奇数位数,java,while-loop,digits,Java,While Loop,Digits,这个程序本质上是一个游戏,用户必须输入数字以查看哪些数字是好的:偶数个偶数数字和奇数个奇数数字 首先,当我输入一位数字时,程序结束,这不是故意的。我假设这和while有关(n>0)。if(numEven%2==0…)也可能存在问题,因为打印结果几乎是随机的,一个数字是好的,而同一个数字有时不好 老实说,我在这一点上迷路了。提前非常感谢您的帮助 更新:此代码按我所希望的方式运行,我只想感谢所有帮助过我的人!这是我计算机科学课的第一学期,所以我在这方面还是比较新的……请原谅我的错误,这些错误可能相当
n>0
)。if(numEven%2==0
…)也可能存在问题,因为打印结果几乎是随机的,一个数字是好的,而同一个数字有时不好
老实说,我在这一点上迷路了。提前非常感谢您的帮助
更新:此代码按我所希望的方式运行,我只想感谢所有帮助过我的人!这是我计算机科学课的第一学期,所以我在这方面还是比较新的……请原谅我的错误,这些错误可能相当愚蠢:)
每次输入一个数字时,您都会增加numEven或numOdd计数,然后使用
如果(numEven%2==0&&numOdd%2==1)
,这是随机的,因为如果您第一次输入数字33=>numOdd=1;=>true=>“Wallace喜欢”,但下次你第二次放33=>numOdd=2;=>false=>“华莱士不喜欢”
编辑*也许你想要这样的东西
public static void main(String[] args)
{
System.out.println("Welcome to the Number Game!"
+ " Try to figure out the pattern "
+ "in the numbers that Wallace likes!");
Scanner scan = new Scanner (System.in);
int n;
boolean isEven;
do
{
System.out.print("Enter a number: ");
n = scan.nextInt();
//if 0, you leave the loop
if(n==0) {
System.out.println("You pressed 0, have a nice day");
break;
}
if (n % 2 == 0)
{
//it is even
isEven = true;
}
else
{
//it is not even
isEven = false;
}
//if even then he likes it, otherwise he does not
if (isEven)
System.out.println("Wallace liked your number!");
else
{
System.out.println("Wallace didn't like your number.");
}
}
//put any contition here, lets say if you press 0 , you leave the loop
while (n != 0);
}
基于您所描述的预期结果,代码中存在一些核心问题。我看到的最明显的问题是,你打算让游戏在每一轮开始时基本上“从头开始”,但你从来没有真正重置numEven和numOdd变量。这是您的打印结果看起来随机的来源。例如,如果您开始游戏并输入数字: 34567 游戏会处理这个数字,并说它是一个有利的数字,因为它是奇数,有奇数个奇数位数(3),有偶数个偶数位数(2)。但是,在再次玩游戏时,它将执行相同的代码,而不会将变量设置回0,这意味着在输入时: 34567 游戏将把这个数字作为坏数字处理,因为奇数的累积值将是6而不是3(因为第一次3+3导致6),而6是偶数。所以我们要做的是:
...
int n;
do
{
int numEven = 0;
int numOdd = 0;
System.out.print("Enter a number: ");
n = scan.nextInt();
...
通过将numEven和numOdd声明放在“do”块内,它们是仅在do块期间存在的局部变量。我们也可以做如下简单的事情:
...
else
{
System.out.println("Wallace didn't like your number.");
}
numEven = 0;
numOdd = 0;
}
while (n > 0);
...
只要重置这些值,我们就可以更一致地跟踪numOdd和numEven的实际预期值
关于当你输入一位数字时程序关闭的问题,我不确定。这是没有意义的,因为这是一个do-while循环,它应该至少执行一次,并发出一个print语句。我现在正在将此代码加载到IDE中,以便对其进行一次运行。如果我发现了什么,我会更新我的答案
-编辑-:再次阅读您的问题后,您似乎不是建议程序在实际完成任何功能之前关闭,而是建议它完全关闭。关闭程序的原因是,您正在执行一个整数除法算术函数,您可能希望使用不同类型的数字。让我解释一下:
在正常的人类计数中,我们有一组没有小数点的自然数。他们通常是这样开始的:
1,2,3,4,5
然后,我们有一组单独的数学数字,在这些数字中,我们的运算精度更高:
0.5,1.4232,3.142
当我们用正常的人类语言谈论数字时,我们假设1除以2得到0.5。然而,计算机并不隐含地知道这一点。为了让计算机从1除以2得出“0.5”的结论,您需要明确告诉它应该使用某种类型的数字来生成该输出
我前面提到的“正常”数字与编程中的整数关系最为松散。它基本上是一个没有小数点的数字。这意味着,每当你把两个整数除在一起,你总是得到另一个整数作为结果。因此,如果将1除以2,计算机不会将结果解释为0.5,因为该数字有一个小数。相反,它将舍入到最接近的整数,在本例中为0
因此,对于一个引用手头实际问题的更具体示例,假设我们在程序中输入数字5。它经历了所有赔率和偶数的计算,但最终得出以下结论:
n /= 10
这就是事情变得古怪的地方。我们正在除以两个整数,但它们的结果并不是一个完美整数。在这种情况下,5/10的结果再次为0.5。但是对于计算机来说,因为我们要除以两个整数,结果0.5就不行了,所以在四舍五入到最接近的整数后,我们得到0。在这一点上,有一个致命的错误:
(while n > 0);
当我们执行这个检查时,我们得到false,while循环结束。为什么?因为在执行n/=10之后,n变为0。并且0不大于0
我们如何解决这个问题?最好的方法是使用浮点数来执行计算。在Java中,这相当简单。我们真正需要做的是:
n /= 10.0
当Java看到我们被10.0除时,这不是一个整数,它会自动将“n”转换为一个浮点数,以被10.0除。在这种情况下,如果n是5,我们用5除以10.0的结果将是0.5。然后,当我们运行时:
(while n > 0);
这是真的!循环不会中断
我将把所有这些更改放在我的IDE中,只是为了确认一切都按照我的预期工作。我建议你也尝试一下,看看它是否能解决你的问题
希望这能有所帮助。如果您的要求是
,程序将在1位数字麻木时结束
(while n > 0);