【问题标题】:Java- Saving score in a gameJava-在游戏中保存分数
【发布时间】:2015-09-28 03:27:12
【问题描述】:

我在“猜测”游戏中难以保持得分。我必须使用 for 循环或 while 循环。我有它,所以在一个名为神秘.txt 的文本文件中创建了 10 个随机数,文件阅读器从文本文件中读取这些数字。

您的分数从 0 开始。如果用户从文本文件中猜对正确的数字,他们将获得 -10 分。如果他们弄错了数字,他们会添加他们从文件中的数字猜到的数字的绝对值差。最后分数越低越好。

当我只运行一次 if else 语句时,它可以正常工作。一旦我不止一次循环它,它就会开始起作用。

我必须使用 if else 语句和 for 或 while 循环。谢谢!

编辑 - 原来我必须使用 for 循环而不是 while 循环,我现在完全迷路了。

它应该如何工作: 当您运行程序时,会生成一个包含 10 个不同数字的文本文件(我已经准备好该代码) 用户被要求输入一个数字,用户输入的数字与文本文件上的第一个文件进行比较。如果相同,他们的分数永远不会得到-10分。如果他们弄错了,他们会得到猜测的数字与添加到分数的文本文件中的数字的差值。这假设重复十次。

    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Scanner;
    import java.util.Random;
    import java.lang.Math;

    public class lab4Fall15 {


public static void numberGuessingGame() throws IOException  {


    Scanner myscnr = new Scanner (System.in);
    PrintWriter mywriter = new PrintWriter("mysteryNumber.txt");


    int randomNumber;


    int i = 0;
    i=1;
    while (i<=10) {
    Random randomGen = new Random();
        randomNumber= randomGen.nextInt(11);
    // then store (write) it in the file
    mywriter.println(randomNumber);
        i = i + 1;
    }

            //Decided to use a loop to generate the numbers-------

    mywriter.close();       



    FileReader fr = new FileReader("./mysteryNumber.txt");
    BufferedReader textReader = new BufferedReader(fr);
    int numberInFile;
    // the number in your file is as follows:
    numberInFile = Integer.valueOf(textReader.readLine());


    int score= 0;


    int a = 1;

    while (a<=10) {
    a=a+1;
    System.out.print ("Please enter a number between 0 and 10: ");
    int userNumber= myscnr.nextInt();
    if (userNumber==numberInFile){
        score = score-10;
        }
    else{ 
        score = score + Math.abs(userNumber-numberInFile);

    }
    System.out.println ("current score is: "+score);
    }




    System.out.println ("your score is "+score);       


    textReader.close();
    }







public static void main(String[] args) throws IOException {
    // ...
    numberGuessingGame();

}

}

【问题讨论】:

  • “行动起来”是什么意思?您有某种错误(崩溃或错误答案)。 具体您要查找的内容。
  • 拜托,你能把当前的输出和你预期的输出放在一个给定的例子中吗?
  • 刚刚添加了它们以及文件阅读器的先前代码。
  • @IanMcLaird 我所说的行动起来的意思是它没有像我描述的那样正确地保持分数。
  • 我注意到的主要事情是您永远不会前进到文件中的第二个数字。就目前而言,您当前的代码会将所有 10 个用户猜测与文件中的第一个数字进行比较。

标签: java loops if-statement for-loop while-loop


【解决方案1】:
if (userNumber==numberInFile){
    score = score-10;
    }

我不明白你的意思。但我可以猜到这一点。您上面的代码没有显示任何错误。通常,您检查您的 , 以上部分代码。你拿变量'numberInFile'。有时,您的文件阅读器会将其与 'whitespace or String or e.t.c' 结合使用。首先你检查这个输出。你把手动数据放到这个变量中并检查输出。如果它工作正常,请更正该功能。

【讨论】:

    【解决方案2】:

    好的,首先,让我们回顾一下for 循环,因为这就是您要问的问题。从您提供的代码来看,您似乎已经了解while 循环,这很好,因为在Java 中,for 循环(通常)只是伪装的while 循环。一般来说,如果你有这个while循环,

    int a = 0;
    while (a < 10) {
        // do stuff with a
        a = a + 1;  // or ++a or a++
    }
    

    你总是可以这样重写它:

    for (int a = 0; a < 10; a = a + 1) {
        // do stuff with a
    }
    

    按照约定(当您研究数组和Collection 类型时,此约定很有用)您将希望从0 而不是1 索引您的循环。既然你只是在学习,现在就相信我的话。从0 循环到n-1,而不是从1n

    除此之外,让我们来解决您得到错误答案的原因(顺便说一句,这与循环无关)。重写为 for 循环,程序的 ask-and-score 部分如下所示。

    for (int a = 0; a < 10; ++a) {
        System.out.print ("Please enter a number between 0 and 10: ");
        int userNumber = myscnr.nextInt();
        if (userNumber == numberInFile){
            score = score - 10;
        } else { 
            score = score + Math.abs(userNumber - numberInFile);
        }
        System.out.println ("current score is: "+score);
    }
    

    您会注意到,在本节中,无处会更新numberInFile 的值。这意味着该循环的每次运行仍在查看该变量在循环开始时具有的任何值。该值来自这一行:

    // the number in your file is as follows:
    numberInFile = Integer.valueOf(textReader.readLine());
    

    在循环运行之前,该行只执行一次。如果您想在每次用户猜数字时加载下一个数字,您需要将其移动到循环内。我将把它作为练习留给读者。

    【讨论】:

      【解决方案3】:

      您实际上并没有捕获用户输入的数字。试试这个:

      int userNumber = Integer.parseInt(KeyIn.readLine());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多