2015-11-07 167 views
1

這個程序本質上是一個遊戲,用戶必須輸入數字來查看哪些數字是好的:偶數個偶數的數字,奇數奇數數字。爪哇,偶數偶數,奇數奇數

因此,首先,程序結束時,我輸入一個數字,這不是故意的。我認爲這與這段時間有關(n > 0)。 if(numEven % 2 == 0 ......)也可能存在問題,因爲打印結果看起來幾乎是隨機的,數字很好,而且有時候這個數字不太好。

老實說,我迷失在這一點上。提前感謝您的幫助。

UPDATE:此代碼正在運行,我希望如此,我只想感謝所有幫助過的人!這是我的計算機科學課的第一學期,所以我還是比較新的,在此......原諒我的錯誤,很可能非常愚蠢的:)

package quackygame; 
import java.util.Scanner; 
public class QuackyGame 
{ 
    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; 
     int numEven = 0; 
     int numOdd = 0; 
     boolean isEven; 

     do 
     { 
      System.out.print("Enter a number > 0: "); 
      n = scan.nextInt(); 
      while (n > 0) 
      { 
       if (n % 2 == 0) 
       { 
        //n is even 
        isEven = true; 
        numEven++; 
       } 
       else 
       { 
        //n is odd 
        isEven = false; 
        numOdd++; 
       } 
       n /= 10; 
      } 
      //if numEven is even and numOdd is odd 
      if (numEven % 2 == 0 && numOdd % 2 == 1) 
       System.out.println("Wallace liked your number!"); 
      else 
      { 
       System.out.println("Wallace didn't like your number."); 
      } 
      numEven = 0; 
      numOdd = 0; 

     } 

     while (n >= 0); 
    } 

} 
+0

如果您的要求是「程序在輸入1位數字時結束」,那麼爲什麼條件是'n> 0'?它應該是正確的? – Rehman

+0

檢查'n = 10;' – Sekula1991

+0

如果您想確保人們知道您的問題已得到解答,請接受當前答案之一或自己做出答案並接受。這將添加一個綠色的複選標記,以便人們看到你滿意,解決了你的問題。您可以通過點擊答案旁邊的複選標記來接受答案。 –

回答

1

根據您所描述的預期結果,代碼中存在一些核心問題。我看到的最明顯的問題是,你打算在每輪開始時基本上「從頭開始」,但是你從來沒有真正重置numEven和numOdd變量。這是您隨機顯示結果的來源。例如,如果你開始遊戲,輸入數字:

遊戲將處理的數量,並說,這是一個良好的數字,因爲它是奇數,有奇數個奇數位數字(3 ),偶數個偶數(2)。然而,在一次玩遊戲,就沒有設置變量執行相同的代碼回0,這意味着在進入:

遊戲將處理這個數字是一個壞的數字,因爲奇數的累計值將是6而不是3(因爲第一次是3 +第二次結果是6),並且6是偶數。因此,我們希望做的是這樣的:

... 

int n; 

do 
{ 
    int numEven = 0; 
    int numOdd = 0; 

    System.out.print("Enter a number: "); 
    n = scan.nextInt(); 

... 

通過將numEven和numOdd聲明的「做」塊內,他們是局部變量只存在了做塊的持續時間。我們還可以做這麼簡單的東西:

... 

    else 
    { 
     System.out.println("Wallace didn't like your number."); 
    } 
    numEven = 0; 
    numOdd = 0; 
} 
while (n > 0); 

... 

只是重置價值將幫助我們跟蹤numOdd和numEven的實際預期值更一致。

關於輸入單個數字時關閉的程序,我不確定。這是沒有意義的,因爲,因爲它是一個do-while循環應該在至少執行一次,併發出打印語句之一。我現在將這段代碼加載到我的IDE中,以便讓它通過。如果我找到了某些東西,我會更新我的答案。

-EDIT-:在再次閱讀您的問題時,似乎您可能不會建議程序在實際完成其任何功能之前關閉,而只是簡單地關閉它。程序關閉的原因是你正在執行一個整數除法算術函數,你可能想要使用不同類型的數字。讓我來解釋:

在正常的人類計數,我們有天然的一套沒有小數點的數字。他們通常這樣開始:

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); 

當我們進行這樣的檢查,我們得到和while循環結束。爲什麼?因爲在執行n/= 10之後,n變爲0.並且0是而不是大於0.

我們該如何解決這個問題?最好的做法可能只是使用浮點數來執行計算。在Java中,這很簡單。我們真正需要做的是:

n /= 10.0 

一旦Java看到我們被除以10.0,這是不是一個整數,它會自動「N」轉換爲浮點數10.0分。那麼在這種情況下,如果n是5,我們除以10.0得到的結果將是0.5。然後,當我們運行時:

(while n > 0); 

這成爲事實!循環不會中斷。

我打算將所有這些更改放到我的IDE中,以確認所有內容都按照我的意圖工作。我建議你試一試,看看它是否能解決你的問題。

希望這會有所幫助。

+0

我實際上打算使用n/= 10而不是n/= 10.0,因爲我正在執行該操作以擺脫數字的最後一位以檢查下一個數字是偶數還是奇數。它除以10,將最後一位數字作爲小數保留,並且小數點會被整數斬掉。所以,我有numEven和numOdd重置爲零後,像你說的else語句,現在我的程序是說,偶數是壞的,奇數是好的...再次不是我所希望的。如果你想確保你正在執行正確的條件檢查,請使用括號:(((numEven%2 == 0 && numOdd%2 == 1) – mjamev10

+0

@ mjamev10) %2)== 0)&&((numOdd%2)== 1))我的例子有點矯枉過正,但你明白了。至於/ = 10操作,只需添加一個單獨的條件,當n已經小於10時,只執行n/= 10.0:if(n <10)n /=10.0 else if(n> = 10)n/= 10. –

+0

好吧,我現在已經按計劃運行了代碼; if語句實際上是可以的,n/= 10也是我想要的。謝謝您的幫助!這是我第一個學習計算機科學的學期,所以我在這方面還很新穎:) – mjamev10

0

您正在增加numEven或numOdd每次算你輸入編號,然後你使用if (numEven % 2 == 0 && numOdd % 2 == 1),這是隨機的,因爲如果你第一次把數字33 => numOdd = 1; => true =>「華萊士喜歡」,但下一次第二次放置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); 
    }