建议使用数组/字符串,随机

时间:2013-11-20 12:25:42

标签: java arrays string random

我正在尝试从外部文件中读取。我已成功完成从文件中读取,但现在我有一点问题。该文件包含大约88个动词。动词写在文件中,如下所示: be was been beat beat beaten become became become 等等......

我现在需要的是我想要一个类似于测试的测验,其中只会出现动词中的两个随机字符串并且用户必须填写缺少的字符串。而不是缺少的那个, 我想要这个(“------”) 。我的英语不怎么好。所以我希望你明白我的意思。

    System.out.println("Welcome to the programe which will test you in english verbs!");
System.out.println("You can choose to be tested in up to 88.");
System.out.println("In the end of the programe you will get a percentage of total right answers.");

Scanner in = new Scanner(System.in);
System.out.println("Do you want to try??yes/no");

String a = in.nextLine();
if (a.equals("yes")) {
    System.out.println("Please enter the name of the file you want to choose: ");

} else {
    System.out.println("Programe is ended!");
}



String b = in.nextLine();
while(!b.equals("verb.txt")){
    System.out.println("You entered wrong name, please try again!");
     b = in.nextLine();

}
System.out.println("How many verbs do you want to be tested in?: ");
int totalVerb = in.nextInt();
in.nextLine();


String filename = "verb.txt";
File textFile = new File(filename);
Scanner input = new Scanner(textFile);

for (int i = 1; i <= totalVerb; i++){



    String line = input.nextLine();

    System.out.println(line);
    System.out.println("Please fill inn the missing verb: ");
    in.next();
}

System.out.println("Please enter your name: ");
in.next();

3 个答案:

答案 0 :(得分:0)

我不太明白“问题”是什么。我假设您可以正确阅读该文件,因此我不会评论该代码。关于如何显示动词和用户填写正确的动词,您可以使用以下内容:

  1. 阅读三个动词
  2. 将三个谓词放在String []数组或ArrayList
  3. 打印数组[0] +“----”+数组[2]
  4. 输入循环
  5. 比较输入是否等于数组[1]
  6. 如果等于从循环中断并进入下三个动词
  7. 希望这个伪代码有帮助。

    <强>更新

    在步骤 3 上,我的意思如下:

    String[] conjugations = new String[3];
    //You have added the conjugations to this array with conjugations[position]=conjugation;
    System.out.println(conjugations[0] + " ----- " + conjugations[2]);
    

    当然假设如下:

    • 您已创建String []变种
    • 您已从文件
    • 中读取动词的三个变形
    • 您已将每个共轭放在您的共轭数组中

    这也假设了什么?

    • 您正在测试的所有动词总是只有3个共轭,并且您总是在测试相同的时态共轭(位于数组位置1的那个)。

    如果您希望它是完全随机的(三个变换中的任何一个),那么您需要使用 java.util.Random 类,如下所示:

    以下假设您已将动词“beat”的三个变换引入到变换String array(String [] conjugations)中。

    Random r = new Random();    
    int posOfConjugationToGuess = r.nextInt(conjugations.length);    
    String phrase = "";    
    String conjugationToGuess;
    
    for(int i=0; i<conjugations.length;++i){
        if(i==posOfConjugationToGuess){
           conjugationToGuess=conjugations[i];
           phrase+=" ----- ";    
        }    
        else{
           phrase+=" " + conjugations[i] + " ";  
        }   
    }   
    System.out.println(phrase)
    

    当用户输入内容时,您将再次检查conjugationToGuess。我现在将解释一些代码。

     Random r = new Random();
    int posOfConjugationToGuess = r.nextInt(conjugations.length);
    

    此代码允许您获取0(包括)之间的随机数以及通过其构造函数(独占)的任何内容。在这种情况下它将是3,因为这是你的共轭数组的长度。

    为什么我这样做?好吧,如果你要放,让我们说4,那么在某些时候你会得到随机整数3,当你尝试conjugations[3]时,你会得到IndexOutOfBoundsError

    for loop 仅用于构造要打印的短语。怎么样?这个想法是你将遍历你的共轭数组,将每个单词添加到短语中,但如果你遇到随机位置(当i==posOfConjugationToGuess时)确定你要求的结合,你不要将它添加到短语中,而是放入“------”。就这样。

    再一次,这假设你的所有动词只有三个共轭。如果变换不总是三,那么您将需要使用ArrayList。希望这可以帮助。

答案 1 :(得分:0)

这样做的一个简单方法就是像这样实现它:

首先,将文本文件中的三个动词读入大小为3的String Array []。 然后使用Java.util.Random使用nextInt(int N)方法从0-2生成int i。 例如,如果将int i随机选为1,则可以使用开关或类似物 if / else结构显示数组[0]和数组[2]的内容,然后请求输入用户输入缺失的动词时态。将用户输入与未显示数组的内容(在本例中为array [1])进行比较,并返回它是否匹配。

您还应该通过将用户输入全部小写(使用.toLowerCase())来规范化您的用户输入,以便用户不会因为大小写而得错答案。

答案 2 :(得分:0)

首先,您需要读取文件中的所有数据:

String[][] verbs = new String[30][3]; //create a new 2D array
Scnanner inFile = new Scanner(new File("<file name here>.txt")); //create a new Scanner object to read data in from a file
for(int i = 0; inFile.hasNext(); i++) //while inFile still has data that hasn't been read; increment i
{
    for(int j = 0; j < 3; j++) //loop 3 times
    {
        verbs[i][j] = inFile.next(); //set read data and put it in "verbs"
    }
}

在此之后,您将拥有一个包含该文件中所有动词的2D array。 2D数组中的每一行都包含一个数组,其中三个动词相同但不同时态。

您现在需要选择并显示两个随机动词:

Random random = new Random(); //create a new Random object, which we can use to generate random numbers
int row = random.nextInt(verbs.length) //pick a random set of 3 verbs
columnExcluded = random.nextInt(3) //pick a random verb to guess

System.out.print("Here are two verbs: ");

for(int i = 0; i < 3; i++) //loop 3 times
{
    if(i != columnExcluded) //if this verb is not the one that the person should guess
    {
        System.out.print(verbs[row][i] + ", "); //println the verb
    }
}
System.out.println("_____"); //print blank line
System.out.print("What is the third tense of this verb? ");
String verbGuess = in.nextLine(); //take the guess
if(verbGuess.equalsIgnoreCase(verbs[row][columnExcluded]) //if verb guessed equals the missing verb
{
    System.out.println("You are right!");
}
else
{
    System.out.println("You are wrong. D:");
}