2014-10-20 97 views
0

你將編寫一個Java程序來玩Pico,Fermi,Bagel的遊戲。 這裏是遊戲規則:類,方法和隨機數生成

電腦會隨機產生一個「祕密」的三位數字。 第一個數字不會是0,所有的數字都會不同。 用戶嘗試猜測數字。如果用戶猜測正確,則遊戲結束。

如果沒有,電腦會給出提示,玩家再試一次。該 提示:

  • 爲每個保密號碼,電腦打印「費米」

  • 匹配的適當地方每個匹配位數的數字,但不能在適當的位置,計算機打印「微微」

  • 如果沒有數字匹配,計算機打印「百吉餅」

程序將有一個主要課程和一個百吉餅課程。百吉餅 類將調用其他3種方法

  1. 生成祕密數

  2. 確定當前的猜想是否是一個勝利者

  3. 評估目前的猜測和打印提示

我的問題 - 當我運行程序時,它要求我輸入一個3位數的代碼,但是它只是要求我輸入一個3位數的代碼,而不是將用戶的猜測數字與隨機生成的數字進行比較。我假設我對這些類或方法做了一些愚蠢的事情,因爲我們不久前才瞭解到它們,並且仍然讓我困惑。

程序的第一部分是我的主類,第二部分是百吉餅類。

package assignment.iii; 
import javax.swing.JOptionPane; 
import java.util.Scanner; 

public class AssignmentIII { 

public static void main(String[] args) 
    { 
    int playagain = JOptionPane.showConfirmDialog(null, "Would you like to play?", "Message", JOptionPane.YES_NO_OPTION); 

    while (playagain == JOptionPane.YES_OPTION) {  

    Bagels myBagels = new Bagels(); 
    myBagels.playGame() ;  
    myBagels.randNumber = 0; 
    playagain = JOptionPane.showConfirmDialog(null, "Would you like to play again?", "Message", JOptionPane.YES_NO_OPTION); 
} 
} 
} 



// start of Bagels class 

package assignment.iii; 
import java.util.Random; 
import javax.swing.JOptionPane; 

public class Bagels{ 


public int randNumber; 
private int Guess; 
private int Rand1, Rand2, Rand3; 
private int Guess1, Guess2, Guess3; 
private int guessCount; 


public void playGame() 
{ 

    do { 
    Guess = Integer.parseInt(JOptionPane.showInputDialog("Enter a three digit number")); 
    } 
    while (Guess != randNumber);     

} 

private int generateSecretNumber() 
{ 
     Random randN = new Random(); 
     return randN.nextInt(999)+1; 
} 

private void printHint(String guess)   
{ 
    if(randNumber == Guess) 
     System.out.println("Correct"); 

     else 
     { 
     Guess1 = (Guess)/100; 
     Guess2 = (Guess%100)/10; 
     Guess3 = (Guess%100)%10; 
     } 

    if(Guess1 == Rand1) 
    { 
     System.out.println("Fermi"); 
    } 
    if(Guess2 == Rand2) 
    { 
     System.out.println("Fermi"); 
    } 
    if(Guess3 == Rand3) 
    { 
     System.out.println("Fermi"); 
    } 
    if(Guess2 == Rand1) 
    { 
     System.out.println("Pico"); 
    } 
    if(Guess3 == Rand1) 
    { 
     System.out.println("Pico"); 
    } 
    if(Guess1 == Rand2) 
    { 
     System.out.println("Pico"); 
    } 
    if(Guess3 == Rand2) 
    { 
     System.out.println("Pico"); 
    } 
    if(Guess1 == Rand3) 
    { 
     System.out.println("Pico"); 
    } 
    if(Guess2 == Rand3) 
    { 
     System.out.println("Pico"); 
    } 
    else if(Guess1 != Rand1 && Guess1 != Rand2 && Guess1 != Rand3 && 
      Guess2 != Rand1 && Guess2 != Rand2 && Guess2 != Rand3 && 
      Guess3 != Rand1 && Guess3 != Rand2 && Guess3 != Rand3) 
    { 
     System.out.println("Bagels"); 
    } 
    guessCount++; 
    } 
} 
+0

還不確定爲什麼只是反覆要求輸入3位數字?我認爲它在我的百吉餅類中與這有關,我的generateSecretNumber和printHint方法表示它們未被使用?但我不知道如何使它們在程序中使用? – Alex 2014-10-20 02:28:59

回答

1

沒有自己測試它,它看起來像錯誤是在你的Assignment類的主要方法。當您創建百吉餅對象時,發生的第一件事就是playGame方法被調用。

Bagels myBagels = new Bagels(); 
myBagels.playGame() ; 

您的playGame方法依賴於randNumber的比較,但randNumber永遠不會初始化! Java成員變量獲取默認值,0表示整數(請參閱:Default Values and Initialization in Java)。因此,除非用戶輸入「0」,否則循環條件將爲真(猜測不等於0),並且將再次提示用戶。

我會做的一個建議是編寫一個構造函數,該構造函數接受一個int值並將randNumber設置爲該值。

+0

所以我在主類中初始化它?我嘗試在字符串下的主類中做(int randNumber = 0;),但它只是說沒有使用randNumber。或者我需要將它添加到playGame下的百吉餅類中? – Alex 2014-10-20 01:39:23

+0

沒錯,那是因爲randNumber是'百吉圈'類中的一個字段。您創建的名爲myBagels的「百吉餅」實例具有randNumber字段。因此,從該類外部(如在您的主要方法中),您可以使用'myBagels.randNumber'訪問它。我會看看[這個頁面](http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html),並嘗試爲你的Bagels類添加一個構造函數,它接受一個int值,並使用它初始化randNumber字段。調用構造函數會看起來像'百吉餅myBagels =新百吉餅(10);'將其初始化爲10。 – 2014-10-20 01:49:27