Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java,偶数位数,奇数位数_Java_While Loop_Digits - Fatal编程技术网

Java,偶数位数,奇数位数

Java,偶数位数,奇数位数,java,while-loop,digits,Java,While Loop,Digits,这个程序本质上是一个游戏,用户必须输入数字以查看哪些数字是好的:偶数个偶数数字和奇数个奇数数字 首先,当我输入一位数字时,程序结束,这不是故意的。我假设这和while有关(n>0)。if(numEven%2==0…)也可能存在问题,因为打印结果几乎是随机的,一个数字是好的,而同一个数字有时不好 老实说,我在这一点上迷路了。提前非常感谢您的帮助 更新:此代码按我所希望的方式运行,我只想感谢所有帮助过我的人!这是我计算机科学课的第一学期,所以我在这方面还是比较新的……请原谅我的错误,这些错误可能相当

这个程序本质上是一个游戏,用户必须输入数字以查看哪些数字是好的:偶数个偶数数字和奇数个奇数数字

首先,当我输入一位数字时,程序结束,这不是故意的。我假设这和while有关(
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);