Java 尝试从JTextfield获取输入并在另一个方法中使用
我在尝试存储位于GuessGame()方法中的Java 尝试从JTextfield获取输入并在另一个方法中使用,java,swing,Java,Swing,我在尝试存储位于GuessGame()方法中的JTextfield中的值并将其放入位于FindDiddlEnumber()的数组时遇到问题。当程序结束时,我得到的只是用户最后一次输入的随机数 有人能看一下我的代码,看看我哪里错了吗 import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; public class GuessGame extends JFrame { Contain
JTextfield
中的值并将其放入位于FindDiddlEnumber()的数组时遇到问题。当程序结束时,我得到的只是用户最后一次输入的随机数
有人能看一下我的代码,看看我哪里错了吗
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 );
}
}
}
import java.awt.*;
导入java.awt.event.*;
导入java.util.*;
导入javax.swing.*;
公共类猜谜游戏扩展JFrame
{
集装箱;
int电流距离;
int输入猜测;
最后距离;
int medianValue=40;
整数中间数;
int位置指数=5;
私人杰布顿新游戏;
私有JLabel消息;
专用JLabel提示符;
专用JLabel号码输入;
私有JTextField猜测输入;
私人智力测验;
私有整数随机数;
公众猜谜游戏
{
超级(“玩猜数字游戏2.1版”);
setLayout(新的FlowLayout());
countGuess=0;
prompt=new JLabel(“N到100之间的随机数已被删除”
+"获选";;
numberInput=new JLabel(“写下您的号码并按回车键:”);
猜测输入=新的JTextField(5);
addActionListener(新的GuessHandler());
message=new JLabel(“结果将在此处显示”);
newGame=newjbutton(“开始新游戏”);
newGame.addActionListener(newActionListener())
{
@凌驾
已执行的公共无效操作(操作事件)
{
guessInput.setText(“”);
guessInput.setEditable(true);
生成枚举器();
}
});
container=getContentPane();
container.add(提示);
容器。添加(编号输入);
container.add(猜测输入);
container.add(消息);
container.add(newGame);
设置尺寸(380150);
setVisible(真);
生成枚举器();
}
私有void生成器枚举器()
{
随机数=(int)(Math.random()*93+7);
系统输出打印项次(随机数);
}
public void processGuessedNumber(int usersGuess)
{
countGuess++;
如果(countGuess==1)
{
lastDistance=Math.abs(usersGuess-randomNumber);
if(usersGuess>randomNumber)
message.setText(“高于正确的猜测”);
其他的
message.setText(“低于正确猜测”);
}
其他的
{
currentDistance=Math.abs(usersGuess-randomNumber);
if(usersGuess>randomNumber)
{
message.setText(“高于正确猜测”);
lastDistance=当前距离;
}
else if(usersGuess=随机数)
{
打破
}
}
while(inputGuess!=随机数);
中间数=测试阵列[(猜测数)/2];
System.out.printf(“\n中间是:“+middleNumber”);
最终输出();
}
公共无效最终输出()
{
showMessageDialog(空,“恭喜你,猜猜看”
+“正确。”+“\n\n1.所有猜测的中间数字”
+“用户输入的数字为:“+middleNumber+”\n\r2.中间值”
+“用户猜测的所有数字的值为:”
+medianValue+“\n\r3.正确的位置(数组索引)”
+排序数组中的猜测数为:“+positionIndex,
“最终输出”,JOptionPane.PLAIN_消息);
}
公共静态void main(字符串[]args)
{
GuessGame应用程序=新建GuessGame();
application.setDefaultCloseOperation(关闭时退出);
}
类GuessHandler实现ActionListener
{
@凌驾
已执行的公共无效操作(操作事件)
{
inputGuess=Integer.parseInt(guessInput.getText());
processGuessedNumber(inputGuess);
}
}
}
当用户来时,您需要从他们那里获取输入并存储它们。在您的actionPerformed()
中,它是来自JTextField
的值,将这些值存储在数组test[]
中,然后调用您的ProcessGuessedNumber
,如果它匹配,则调用您的findmidlenumber
,我不知道你为什么要从系统中获取输入,当inputGuess
匹配randomNumber
时,将它们存储在一个数组中,所以很明显你的inputGuess
最新值将是最后一个值,即randomNumber
当用户在数组中输入时,控件将自动移动到您的middleNumer()
,如果它等于随机数。因此,在猜测处理程序的actionPerformed()
中:
然后使用此数组计算所需的任何内容,如:
middleNumber = test[( i)/ 2];
System.out.printf( "\nMiddle is: " + middleNumber);
finalOutput();
完整的代码
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++;
}
}
}
import java.awt.*;
导入java.awt.event.*;
导入java.util.*;
导入javax.swing.*;
公共类猜谜游戏扩展JFrame{
集装箱;
int电流距离;
int输入猜测;
最后距离;
int medianValue=40;
整数中间数;
int位置指数=5;
整数测试[]=新整数[20];
int num_of_guess=0;
私人杰布顿新游戏;
私有JLabel消息;
专用JLabel提示符;
专用JLabel号码输入;
私有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;
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++;
}
}
}