0

我必须编写一个读取 3 个数字的程序(使用输入框)​​,并根据它们的值写入以下消息之一:

  • 所有 3 个数字都是奇数或
  • 所有 3 个数字都是偶数或
  • 2个数字是奇数,1个是偶数或
  • 1个是奇数,2个是偶数

这是我到目前为止所拥有的:

import javax.swing.JOptionPane;
class program3

{
    public static void main(String[] args)

    {

        String num1 = JOptionPane.showInputDialog("Enter first number.");
        String num2 = JOptionPane.showInputDialog("Enter second number.");
        String num3 = JOptionPane.showInputDialog("Enter third number.");

        boolean newnum1 = Integer.parseInt(num1);
        boolean newnum2 = Integer.parseInt(num2);
        boolean newnum3 = Integer.parseInt(num3);
    }

}

这就是我卡住的地方。我不确定如何使用 MOD 来显示消息。我想我也必须使用 IF 语句......但我不太确定。

请帮忙!:D

4

8 回答 8

11

在 Java 中,模运算符是%. 你可以像这样使用它:

if ( (a % 2) == 0) {
    System.out.println("a is even");
}
else {
    System.out.println("a is odd");
}

将它与一些 if 语句或一些计数器结合以实现最终结果。

PS:newnumX 的类型看起来很奇怪 :)

于 2009-10-30T23:45:52.730 回答
5

我会建议你

  • 开始在一张纸上写下你将如何手动完成。(写算法)

  • 然后确定哪些部分是“可编程的”,哪些不是(识别变量、语句等)。

  • 手动尝试不同的数字,看看它是否有效。

  • 从那里我们可以帮助您将这些想法转化为工作代码(这很容易)。

这些是您必须掌握的基本编程技能。

不值得我们只回答:

 boolean areAllEven = ( one % 2 == 0 ) &&  ( two % 2 == 0 ) && ( three % 2 ==  0 ) ;
 boolean areAllOdd  = ( one % 2 != ..... etc etc 

因为我们会帮助你。

相关条目:从问题传递到代码的过程。你是怎么学的?

于 2009-10-30T23:57:52.397 回答
1

为了避免大而丑陋的嵌套 IF,我会声明一个小计数器(在伪代码中):

if newnum1 mod 2 == 1 then oddcount += 1;
etc...

switch oddcount
    case 0:
        print "All three numbers are even"
    etc...
于 2009-10-30T23:47:05.660 回答
1

如果您选择%在 Java 中使用运算符,这只是一个警告:如果它的左操作数为负数,它将产生一个负数。(参见语言规范)也就是说,(-5) % 2产生结果 -1。

您可能需要考虑按位运算,例如“x & 1”来测试偶数/奇数。

于 2009-10-31T00:29:03.623 回答
0

写下执行任务必须执行的基本步骤,然后尝试在代码中实现它。

这是你必须做的:

1 - 从用户那里获得 3 个号码。

2 - 您需要两个变量:一个保存奇数输入的数量,另一个保存偶数输入的数量。让我们称它们为evenCnt 和oddCnt。(提示:既然你知道你只有 3 个数字,一旦你确定了其中一个,另一个就是与 3 的差)

3 - 然后你需要一系列测试(如果 evenCnt 是 3 则显示“3 evens”,否则如果 ....)

(并且 Pascal 和 Kurosch 已经为您提供了填写步骤 2 和 3 所需的片段。)

[编辑:我的 #2 头脑发热。你只需要一个变量。]

于 2009-10-30T23:49:01.287 回答
0

干得好。我刚刚编译并通过它运行了一些测试用例以确认它有效。

import javax.swing.JOptionPane;

class Program3 {
    public static void main(String[] args) {
        int evenCount = 0;

        for (int i=0; i<3; i++) {
            // get the input from the user as a String
            String stringInput = JOptionPane.showInputDialog("Enter number " + (i+1) + ".");

            // convert the string to an integer so we can check if it's even
            int num = Integer.parseInt(stringInput);

            // The number is considered even if after dividing by 2 the remainder is zero
            if (num % 2 == 0) {
                evenCount++;
            }
        }

        switch (evenCount) {
            case 3:
                System.out.println("All are even");
                break;
            case 2:
                System.out.println("Two are even, one is odd");
                break;
            case 1:
                System.out.println("One is even, two are odd");
                break;
            case 0:
                System.out.println("All are odd");
                break;
        }
    }
}

顺便说一句:我将类名大写是因为在 Java 中这样做是最佳实践。

于 2009-10-30T23:50:52.330 回答
0

比这更简单,你有树号 a,b,c

n = a%2 + b%2 +c%2
switch (n):
 case 0: 'three are even'
 case 1: 'one is odd'
 case 2: 'one is even'
 case 3: 'three are odd'

瞧!

于 2009-10-31T00:38:10.640 回答
0

我不同意 alphazero。我认为不需要两个变量。每个数字要么是永远,要么是奇数。因此,保持计数就足够了。

至于 Asaph 的代码,我认为它有据可查,但如果您仍然需要解释,这里是:

这就是 for 循环的作用:

它读取(作为字符串)3 个数字的用户输入
Integer.parseInt是一个以 aString作为参数(例如'4')并返回一个int(在本例中为 )的函数4。然后他检查这个整数是否是偶数,将它修改为 2。基本思想是:4%2 = 0 和 9%2 = 1(当使用 mod 运算符时a%b给出操作后的余数a/b。因此如果a%2为 0,则a 是偶数)。有一个计数器(称为evenCount)跟踪有多少整数是偶数(基于%s测试)。

然后他继续在evenCount. switch 语句有点像 if-else 语句。它的工作方式是根据 case 值(在本例中为 3、2、1、0)测试 switch 参数(在本例evenCount中为 )。如果测试返回 True,则执行 case 块中的代码。如果在那个 case 块的末尾没有 break 语句,那么后面的 case 块中的代码也会被执行。

在这里,Asaph 通过将 evenCount 与 0、1、2 和 3 进行比较来检查有多少个数字是偶数,然后使用适当的打印语句告诉用户有多少个偶数

希望这可以帮助

于 2009-10-31T01:23:39.660 回答