2012-04-30 27 views
2

Im試圖存儲位於方法GuessGame()中的JTextfield的值,並將它們放入位於findMiddleNumber()中的數組中。當程序結束時我得到的是用戶的最後一個輸入,即randomNumber。嘗試從JTextfield獲取輸入並在另一個方法中使用

可能有人請看看我的代碼,看看在那裏我鑼錯了,請

import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 
import javax.swing.*; 

public class GuessGame extends JFrame 
{ 
Container container; 
int currentDistance; 

int inputGuess; 
int lastDistance; 
int medianValue = 40; 
int middleNumber; 
int positionIndex = 5; 

private JButton newGame; 
private JLabel message; 
private JLabel prompt; 
private JLabel numberInput; 
private JTextField guessInput; 
private int countGuess; 
private int randomNumber; 



public GuessGame() 
{ 
    super("Play Guess A Number Game Version 2.1"); 
    setLayout(new FlowLayout()); 

    countGuess = 0; 

    prompt = new JLabel("A random number between N and 100 has been" 
      + " selected."); 
    numberInput = new JLabel("Write your number and press enter key: "); 

    guessInput = new JTextField(5); 
    guessInput.addActionListener(new GuessHandler()); 
    message = new JLabel("The result will be shown here."); 


    newGame = new JButton("Start New Game"); 
    newGame.addActionListener(new ActionListener() 
    { 
     @Override 
     public void actionPerformed(ActionEvent event) 
     { 

      guessInput.setText(""); 
      guessInput.setEditable(true); 

      generateNumber(); 

     } 
    }); 

    container = getContentPane(); 
    container.add(prompt); 
    container.add(numberInput); 
    container.add(guessInput); 
    container.add(message); 
    container.add(newGame); 

    setSize(380, 150); 
    setVisible(true); 

    generateNumber(); 

} 

private void generateNumber() 
{ 
    randomNumber = (int) (Math.random() * 93 + 7); 
    System.out.println(randomNumber); 

}   

public void processGuessedNumber(int usersGuess) 
{ 
    countGuess++; 

    if (countGuess == 1) 
    { 
     lastDistance = Math.abs(usersGuess - randomNumber); 

     if (usersGuess > randomNumber) 
      message.setText("Higher than correst guess."); 
     else 
      message.setText("Lower than correct guess."); 

    } 

    else 
    { 
     currentDistance = Math.abs(usersGuess - randomNumber); 

     if (usersGuess > randomNumber) 
     { 
      message.setText("Higher than correct guess."); 

      lastDistance = currentDistance; 

     } 

    else if (usersGuess < randomNumber) 
    { 
     message.setText("Lower than correct guess."); 

     lastDistance = currentDistance; 

    } 

     else 
     { 
      message.setText("Congratulations, your guess is correct!"); 

      guessInput.setEditable(false); 
      countGuess = 0; 

      findMiddleNumber(); 
     } 
    } 
} 
public void findMiddleNumber() 
{ 
    int num_of_guesses = 0; 

    Scanner inputs = new Scanner(System.in); 

    int [] testArray = new int[ 20 ]; 

    do 
    { 
     if (inputGuess != randomNumber) 
     { 
      inputGuess = inputs.nextInt();  

     } 
     else 
      testArray[ num_of_guesses ] = inputGuess; 
      num_of_guesses++; 

      if (inputGuess >= randomNumber) 
      { 
       break;  
      } 

    } 
    while (inputGuess != randomNumber); 

    middleNumber = testArray[(num_of_guesses)/ 2]; 

    System.out.printf("\nMiddle is: " + middleNumber); 

    finalOutput(); 
} 


public void finalOutput() 
{ 
    JOptionPane.showMessageDialog(null,"Congratulations, your guess " 
     + "is correct." + "\n\n1. Middle number from all guessed " 
     + "numbers by the user is: " + middleNumber + "\n\r2. Median " 
     + " value of all guessed numbers by the user is: " 
     + medianValue + "\n\r3. A position (array index) of correctly " 
     + "guessed number in sorted array is: " + positionIndex, 
     "Final Output", JOptionPane.PLAIN_MESSAGE); 

} 

public static void main(String [] args) 
{ 
    GuessGame application = new GuessGame(); 
    application.setDefaultCloseOperation(EXIT_ON_CLOSE); 

}   

class GuessHandler implements ActionListener 
{ 
    @Override 
    public void actionPerformed (ActionEvent event) 
    { 
     inputGuess = Integer.parseInt(guessInput.getText()); 
     processGuessedNumber(inputGuess); 

    } 
} 
} 
+0

你有一個像middleNumber沒有方法()和遊戲(),請編輯正確的名稱 –

回答

2

你需要的時候都來從用戶獲取用戶輸入並存儲它們。在actionPerformed()這是從JTextField說話值時,這些值存儲陣列test[]中,那麼你打電話給你ProcessGuessedNumber,那麼如果匹配,你findmidlenumber被調用,它我不知道爲什麼你以前需要從system.in輸入並將它們存儲在一個數組中時inputGuess匹配randomNumber,因此您的inputGuess最新值將是最後一個,這是randomNumber

當用戶輸入數組時,輸入數組中的用戶輸入,如果它等於randomNumber,控件將自動移動到您的middleNumer()。所以,在你GuessHandler的actionPerformed()

public void actionPerformed (ActionEvent event) 
{ 
    inputGuess = Integer.parseInt(guessInput.getText()); 
    test[i]= inputGuess; 
    processGuessedNumber(inputGuess); 
    i++; 

} 

使用這個數組來計算任何你想要的,如:

middleNumber = test[(i)/ 2]; 
System.out.printf("\nMiddle is: " + middleNumber); 
finalOutput(); 

Complete Code

import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 
import javax.swing.*; 

public class GuessGame extends JFrame { 
Container container; 
int currentDistance; 

int inputGuess; 
int lastDistance; 
int medianValue = 40; 
int middleNumber; 
int positionIndex = 5; 
int test[] = new int[20]; 
int num_of_guess = 0; 

private JButton newGame; 
private JLabel message; 
private JLabel prompt; 
private JLabel numberInput; 
private JTextField guessInput; 
private int countGuess; 
private int randomNumber; 

public GuessGame() { 
    super("Play Guess A Number Game Version 2.1"); 
    setLayout(new FlowLayout()); 

    countGuess = 0; 

    prompt = new JLabel("A random number between N and 100 has been" 
      + " selected."); 
    numberInput = new JLabel("Write your number and press enter key: "); 

    guessInput = new JTextField(5); 
    guessInput.addActionListener(new GuessHandler()); 
    message = new JLabel("The result will be shown here."); 

    newGame = new JButton("Start New Game"); 
    newGame.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent event) { 

      guessInput.setText(""); 
      guessInput.setEditable(true); 

      generateNumber(); 

     } 
    }); 

    container = getContentPane(); 
    container.add(prompt); 
    container.add(numberInput); 
    container.add(guessInput); 
    container.add(message); 
    container.add(newGame); 

    setSize(380, 150); 
    setVisible(true); 

    generateNumber(); 

} 

private void generateNumber() { 
    randomNumber = (int) (Math.random() * 93 + 7); 
    // randomNumber = 45; 
    System.out.println(randomNumber); 

} 

public void processGuessedNumber(int usersGuess) { 
    countGuess++; 

    if (countGuess == 1) { 
     lastDistance = Math.abs(usersGuess - randomNumber); 

     if (usersGuess > randomNumber) 
      message.setText("Higher than correst guess."); 
     else 
      message.setText("Lower than correct guess."); 

    } 

    else { 
     currentDistance = Math.abs(usersGuess - randomNumber); 

     if (usersGuess > randomNumber) { 
      message.setText("Higher than correct guess."); 

      lastDistance = currentDistance; 

     } 

     else if (usersGuess < randomNumber) { 
      message.setText("Lower than correct guess."); 

      lastDistance = currentDistance; 

     } 

     else { 
      message.setText("Congratulations, your guess is correct!"); 

      guessInput.setEditable(false); 
      countGuess = 0; 

      findMiddleNumber(); 
     } 
    } 
} 

public void findMiddleNumber() { 
    /* 
    * int num_of_guesses = 0; 
    * 
    * Scanner inputs = new Scanner(System.in); 
    * 
    * int [] testArray = new int[ 20 ]; 
    * 
    * do { if (inputGuess != randomNumber) { 
    * 
    * 
    * {inputGuess = inputs.nextInt(); 
    * System.out.println("inputGuess:"+inputGuess); } 
    * 
    * 
    * } else testArray[ num_of_guesses ] = inputGuess; 
    * System.out.println("testarr " 
    * +num_of_guesses+" :"+testArray[num_of_guesses]); num_of_guesses++; 
    * 
    * if (inputGuess >= randomNumber) { break; } 
    * 
    * } while (inputGuess != randomNumber); 
    */ 

    middleNumber = test[(num_of_guess)/2]; 

    System.out.printf("\nMiddle is: " + middleNumber); 

    finalOutput(); 
} 

public void finalOutput() { 
    JOptionPane.showMessageDialog(null, "Congratulations, your guess " 
      + "is correct." + "\n\n1. Middle number from all guessed " 
      + "numbers by the user is: " + middleNumber + "\n\r2. Median " 
      + " value of all guessed numbers by the user is: " 
      + medianValue + "\n\r3. A position (array index) of correctly " 
      + "guessed number in sorted array is: " + positionIndex, 
      "Final Output", JOptionPane.PLAIN_MESSAGE); 

} 

public static void main(String[] args) { 
    GuessGame application = new GuessGame(); 
    application.setDefaultCloseOperation(EXIT_ON_CLOSE); 

} 

class GuessHandler implements ActionListener { 

    @Override 
    public void actionPerformed(ActionEvent event) { 
     inputGuess = Integer.parseInt(guessInput.getText()); 
     // System.out.println("inputGuess"+inputGuess); 
     test[num_of_guess] = inputGuess; 
     //System.out.println(num_of_guess + ":" + test[num_of_guess]); 
     processGuessedNumber(inputGuess); 
     num_of_guess++; 

    } 
} 
} 
+0

如果我把這個編碼在GuessHandler'測試和我'回來與呃和呃ror所以'中間'號碼聲明... – user1364702

+0

對不起,我不明白你的意思?什麼錯誤?你正試圖在'findmiddlenumber()'函數中的數組中獲取值,因爲在處理值之後調用它,所以你需要從用戶那裏獲取每個輸入,當它們被實際輸入時,將它們保存在數組中,然後使用最後找到中間。 – Nikhar

+0

是的,這就是它..錯誤是'中號'非法開始的類型和'測試,我'找不到符號。請幫助 – user1364702

相關問題