【问题标题】:how do i make a variable that combines two variables?我如何制作一个组合两个变量的变量?
【发布时间】:2014-11-01 04:00:57
【问题描述】:

我尝试在网上查找并没有罚款任何有用的东西,我正在制作一个刽子手游戏,我想要一个可以从一大堆单词中随机获取一个单词的字符串,我想如果我让我的所有单词变量像word1,并创建了一个等于单词加上随机整数 Ex 的字符串。 String randomWord = word+randomInt; 然后制作了一个随机数生成器,它将生成一个随机数并将其设置为 randomInt,但是当我这样做时它告诉我 word 不是变量,我尝试将 ' 这些东西放在整个语句中,但它没有不行,我怎么能这样?

代码:

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

public class hangMan {


    public static void main(String[] arg) {

        Random random = new Random();

        int randomInt = random.nextInt(2) + 1;

        System.out.println("Random Integer in Java: " + randomInt);


        //word letters
        final String word1Letter1 = "l";
        final String word1Letter2 = "u";
        final String word1Letter3 = "d";
        final String word1Letter4 = "e";
        final String word1 = "lude";

        final String word2Letter1 = "l";
        final String word2Letter2 = "o";
        final String word2Letter3 = "s";
        final String word2Letter4 = "e";
        final String word2 = "lose";

        final String word3Letter1 = "s";
        final String word3Letter2 = "t";
        final String word3Letter3 = "o";
        final String word3Letter4 = "p";
        final String word3 = "stop";

        //fault counter
        final int faultCounter = 8;

        String randomWord = word+randomInt;

        //looks for the game ----------------------------------------------------------------------------------

        JFrame hangPanel = new JFrame("Hang Game");
        hangPanel.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        hangPanel.setLocationRelativeTo(null);

        JPanel northContainer = new JPanel();
        northContainer.setVisible(true);
        northContainer.setBackground(Color.gray);

        JPanel southContainer = new JPanel();
        southContainer.setVisible(true);
        southContainer.setBackground(Color.gray);


        final JEditorPane outComunication = new JEditorPane();
        outComunication.setVisible(true);
        outComunication.setBackground(Color.lightGray);
        outComunication.setEditable(false);
        outComunication.setSize(300,50);

        final JEditorPane counterOutComunication = new JEditorPane();
        counterOutComunication.setVisible(true);
        counterOutComunication.setBackground(Color.lightGray);
        counterOutComunication.setEditable(false);
        counterOutComunication.setSize(90,50);
        counterOutComunication.setText("Tries left: " + faultCounter);


        JPanel wordLayer = new JPanel();
        wordLayer.setVisible(true);
        wordLayer.setBackground(Color.lightGray);

        final JTextField wordLayerLetter1 = new JTextField(2);
        wordLayerLetter1.setVisible(true);
        wordLayerLetter1.setEditable(false);

        final JTextField wordLayerLetter2 = new JTextField(2);
        wordLayerLetter2.setVisible(true);
        wordLayerLetter2.setEditable(false);

        final JTextField wordLayerLetter3 = new JTextField(2);
        wordLayerLetter3.setVisible(true);
        wordLayerLetter3.setEditable(false);

        final JTextField wordLayerLetter4 = new JTextField(2);
        wordLayerLetter4.setVisible(true);
        wordLayerLetter4.setEditable(false);

        final JButton nextWord = new JButton("Next Word");
        nextWord.setVisible(false);

        final JTextField guessField = new JTextField(10);
        guessField.setVisible(true);

        //Functionality of the game --------------------------------------------------------------------------

        guessField.addActionListener(
            new ActionListener()
            {
                public int innerFaultCounter = faultCounter;
                public void actionPerformed(ActionEvent event)
                {
                    String enteredText = guessField.getText();
                    guessField.setEditable(true);

                    if(enteredText.equals(word1Letter1)) 
                    {
                        outComunication.setText("The letter \"" + enteredText + "\" is correct");
                        wordLayerLetter1.setText(word1Letter1);
                        guessField.setText("");

                    } else if(enteredText.equals(word1Letter2)) {
                        outComunication.setText("The letter \"" + enteredText + "\" is correct");
                        wordLayerLetter2.setText(word1Letter2);
                        guessField.setText("");

                    } else if(enteredText.equals(word1Letter3)) {
                        outComunication.setText("The letter \"" + enteredText + "\" is correct");
                        wordLayerLetter3.setText(word1Letter3);
                        guessField.setText("");

                    } else if(enteredText.equals(word1Letter4)) {
                        outComunication.setText("The letter \"" + enteredText + "\" is correct");
                        wordLayerLetter4.setText(word1Letter4);
                        guessField.setText("");

                    } else if(enteredText.equals(word1)) {
                        outComunication.setText("The word \"" + enteredText + "\" is correct");
                        wordLayerLetter1.setText(word1Letter1);
                        wordLayerLetter2.setText(word1Letter2);
                        wordLayerLetter3.setText(word1Letter3);
                        wordLayerLetter4.setText(word1Letter4);
                        guessField.setText("");

                    } else if(enteredText.equals("")) {
                    outComunication.setText("Please type something");
                    guessField.setText("");

                    } else {
                        outComunication.setText("The letter/Word \"" + enteredText + "\" is wrong");
                        guessField.setText("");

                        innerFaultCounter = innerFaultCounter - 1;
                        counterOutComunication.setText("Tries left: " + innerFaultCounter);

                    }

                    //make an if statement that sets the correct word if tries = 0

                    if(innerFaultCounter == 0) {
                        guessField.setEditable(false);

                        nextWord.setVisible(true);
                        innerFaultCounter = faultCounter;
                        counterOutComunication.setText("Tries left: " + innerFaultCounter);
                        outComunication.setText("The correct word is \"" + word1 + "\"");

                    }
                    String letterWordLayerLetter1 = wordLayerLetter1.getText();
                    String letterWordLayerLetter2 = wordLayerLetter2.getText();
                    String letterWordLayerLetter3 = wordLayerLetter3.getText();
                    String letterWordLayerLetter4 = wordLayerLetter4.getText();
                    if(letterWordLayerLetter1.equals(word1Letter1)) {
                        if(letterWordLayerLetter2.equals(word1Letter2)) {
                            if(letterWordLayerLetter3.equals(word1Letter3)) {
                                if(letterWordLayerLetter4.equals(word1Letter4)) {
                                    nextWord.setVisible(true);
                                    guessField.setEditable(false);
                                    innerFaultCounter = faultCounter;
                                    counterOutComunication.setText("Tries left: " + innerFaultCounter);
                                    outComunication.setText("The word \"" + word1 + "\" is correct");
                                }
                            }
                        }
                    }
                }
            }
            );

        nextWord.addActionListener(
        new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                guessField.setEditable(true);
                nextWord.setVisible(false);
                wordLayerLetter1.setText("");
                wordLayerLetter2.setText("");
                wordLayerLetter3.setText("");
                wordLayerLetter4.setText("");
                outComunication.setText("");
            }
        }
        );


        //Sorting the pecies of the program intothe display

        wordLayer.add(wordLayerLetter1);
        wordLayer.add(wordLayerLetter2);
        wordLayer.add(wordLayerLetter3);
        wordLayer.add(wordLayerLetter4);
        wordLayer.add(nextWord);

        northContainer.add(guessField, BorderLayout.NORTH);
        northContainer.add(wordLayer, BorderLayout.SOUTH);

        southContainer.add(outComunication, BorderLayout.EAST);
        southContainer.add(counterOutComunication, BorderLayout.WEST);

        hangPanel.add(southContainer, BorderLayout.SOUTH);
        hangPanel.add(northContainer, BorderLayout.NORTH);
        hangPanel.pack();
        hangPanel.setVisible(true);
    }
}

现在唯一相关的部分是第一行,剩下的就是整个游戏功能,我没有将actionListener中的if语句设置为randomWord,因为直到@987654326我才会这样做@ 工作正常,我该如何解决这个问题?

【问题讨论】:

  • now the only part that is relavent is the first bunch of lines...
  • 天哪,是时候了解arrays了。
  • 我想是时候打开程序员最好的朋友 API 了

标签: java string variables random int


【解决方案1】:
String[] myWords = { "alpha", "beta", "meringue" };

String randomWord = myWords[random.nextInt(myWords.length)];

https://en.wikipedia.org/wiki/Array_data_structure

【讨论】:

  • ok 还有一个问题,就是单词,但是每个单词有 4 个字母,当我在文本字段中输入一个字母时,它会检查该字母,即 word1Letter1。这只有在他们猜出整个单词时才有效。
  • 您可以使用randomWord.contains(...) 查看单词是否包含给定字母。您可以使用randomWord.charAt(i) 查看给定位置的字母。将每个字母放在一个单独的变量中是浪费精力。 docs.oracle.com/javase/6/docs/api/java/lang/String.html
【解决方案2】:

下面看到的代码无法编译的原因是您从未创建过任何名为 word 的对象。

String word = "someRandomWordHere";
String randomWord = word + randomInt;

以下是解决此问题的方法:

1.) Turn your 3 final word variables into arrays.
2.) Loop through the arrays.
3.) Implement random in such a way that it picks one of the 3 words you've specified.
4.) Set your randomWord equal to the newly randomized word.
5.) Continue 

编辑:

public static void main(String[] args) {

    Random r = new Random();
    int randomInt = r.nextInt(3);

    String words[] = { "lude", "lose", "stop" };
    String randomWord = words[randomInt];

    System.out.println(randomWord);
}

【讨论】:

  • 我只是这样做并将对象单词设置为“单词”,但是会打印出 word1 或任何随机数,我希望它调用对象 word1 这将是引诱
  • 抱歉,该评论是在您编辑答案之前发表的。
  • @yoseph1998 另外,查看 String 类中的 charAt(Index) 方法。它使您可以访问字符串中的特定字符。可能会帮助您对单个字母进行比较。
【解决方案3】:

你应该把你所有的词放在一个这样的数组中:

 String words = {"word1","word2","word3"};

创建一个随机生成器对象

Random randomWordGenerator = new Random();

每当你想得到一个随机单词时,只需生成一个随机整数并将这个值用作数组中字母的索引值,如下所示:

int index = randomWordGenerator.nextInt(words.length);

现在这应该给你一个随机的词:

String randomWord = words[index];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-08
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    相关资源
    最近更新 更多