如何分析Java中数字的均匀性/奇怪性

时间:2009-10-30 23:38:13

标签: java modulo

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

  • 所有3个数字都是奇数 OR
  • 所有3个数字都是均匀的 OR
  • 2个数字是奇数,1个是偶数 OR
  • 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

8 个答案:

答案 0 :(得分:10)

在Java中,模数运算符为%。您可以像这样使用它:

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

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

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

答案 1 :(得分:5)

我建议你

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

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

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

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

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

我们不值得回答:

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

因为我们会帮助你。

相关条目:Process to pass from problem to code. How did you learn?

答案 2 :(得分:1)

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

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

switch oddcount
    case 0:
        print "All three numbers are even"
    etc...

答案 3 :(得分:0)

记下执行任务所需的基本步骤,然后尝试在代码中实现它。

以下是您需要做的事情:

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

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

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

(Pascal和Kurosch几乎已经为你提供了填写第2步和第3步所需的片段。)

[编辑:我的#2是毛茸茸的。你只需要一个变量。]

答案 4 :(得分: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中这样做。

答案 5 :(得分:0)

如果您选择在Java中使用%运算符,则只是一个警告:如果其左侧操作数为负数,则会产生负数。 (参见language specification)也就是说,(-5) % 2生成结果-1。

您可能需要考虑按位操作,例如“x&amp; 1”测试偶数/奇数。

答案 6 :(得分: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'

瞧!

答案 7 :(得分:0)

我不同意alphazero。我不认为有两个变量是必需的。每个数字都是永远或奇数。所以保持一个就足够了。

至于Asaph的代码,我认为它有很好的文档记录,但是如果你仍然需要解释,请点击这里:

这就是for循环的作用:

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

然后他继续在%s上做切换声明。 switch语句有点像if-else语句。它的工作方式是通过针对案例值(在本例中为3,2,1,0)测试switch参数(在本例中为evenCount)。如果测试返回True,则执行case块中的代码。如果在该case块的末尾没有break语句,那么,也会执行以下case块中的代码。

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

希望这有帮助