2009-10-30 55 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適當的打印語句來告訴用戶有多少偶數有

希望這會有所幫助