2009-10-30 53 views
0

我必须写一个程序,读取3个数字(使用输入框)​​,并根据他们的价值观应该写这些消息之一:如何分析号码的均匀度/奇怪在Java中

  • 所有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

+0

这是功课吗? – Asaph 2009-10-30 23:39:41

+0

不,它来自一本教科书。但是它没有这方面的例子。 – appreciation 2009-10-30 23:40:20

+5

你试过编译这个吗?不*关于newnum1,2,3的东西*看起来不对? – alphazero 2009-10-30 23:43:04

回答

10

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

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

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

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

1

为了避免大丑嵌套的IF,我将宣布一个小柜台(在伪代码):

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

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

这个怎么样:oddcount + = newnum1 mod 2; – pkaeding 2009-10-30 23:52:06

+0

负数破坏:-1%2 == -1 – jackrabbit 2009-11-01 20:03:29

0

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

这里是你必须做的:

1 - 从用户那里得到3个数字。

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

3 - 然后你需要一系列测试(如果evenCnt是3,那么显示“3·埃文斯”,否则,如果....)

(和Pascal和Kurosch都非常给了你所需要填写的步骤2中的片段和3)

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

+0

我打算在这个答案中投下自己的2个变数;) – alphazero 2009-10-31 01:06:26

+0

显然不能投票自己。 – alphazero 2009-10-31 01:07:24

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中最好的做法。

+2

感谢您的代码,但您能向我解释它的工作原理吗?我很难找到这个活动! – appreciation 2009-10-30 23:54:04

+0

@ appreciation:我刚刚引入了一个循环来删除一些代码重复。我将在for循环中添加注释,以阐明每个步骤的作用。 – Asaph 2009-10-31 00:00:49

+1

感谢您的帮助! 我还有一个问题: 为什么把类名大写很重要?如果我是正确的,类名称与文件名称相同。当我进入我的程序文件夹时,我注意到了这一点。 – appreciation 2009-10-31 01:54:12

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?

+1

+1。这很可能是我见过的简单编程问题的最佳答案。写得很好的奥斯卡。 – 2009-10-31 02:39:23

+0

@ D.Shawley:哦,谢谢。这可能是我曾经有过的最好的评论:“) – OscarRyz 2009-10-31 02:53:06

+0

好吧,为了公平起见,这一个和”我爱你“在这里:http://bit.ly/34oAze – OscarRyz 2009-10-31 02:55:30

0

如果您选择使用Java中的%运营商只是一个警告:如果其左侧操作数是负的,这将产生一个负数。 (请参阅language specification)也就是说,(-5) % 2会生成结果-1。

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

+0

@Jason S:关于负数的好处和%运算符。对于许多程序员来说,具有负数的%行为实际上是令人惊讶的,因为它与其他语言中%的行为不一致,这已被Sun报告为错误,但被解释为“没有错误” %是余数运算符,*不是*模数运算符。http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4639626 说了这么多之后,按位比较,虽然它们可能有效,但有些不太合适。更好地使用更易读的%运算符,即使你必须使用特殊情况下的负数。 – Asaph 2009-10-31 02:58:58

+0

测试偶数/奇数时,不需要特殊情况下的负数:与0进行比较,而不是1进行比较。 – jackrabbit 2009-11-01 20:06:59

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' 

瞧!

+0

@migsho:非常好,紧凑:)但是,它看起来不像java代码,这是一个java问题。 – Asaph 2009-10-31 02:47:51

0

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

至于亚萨的代码,我认为这是有据可查的,但如果你还是想要一个解释,这里有云:

这就是for循环的作用:

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

然后他继续在evenCount上做switch语句。 switch语句有点像if-else语句。它的工作方式是通过测试开关参数(在本例中为evenCount)与案例值(在本例中为3,2,1,0)的关系。如果测试返回True,则执行case块中的代码。如果在该情况块的末尾没有中断语句,那么以下情况块中的代码也会被执行。

这里,亚萨是检查,看看有多少数据甚至通过比较evenCount为0,1,2,3,然后usinga适当的打印语句来告诉用户有多少偶数有

希望这会有所帮助