我遇到了问题,以便在我的猜测中保持分数"游戏。我必须使用for循环或while循环。我有它所以在一个名为mystery.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();
}
}
答案 0 :(得分:1)
if (userNumber==numberInFile){
score = score-10;
}
我不明白你的意思。但我猜这个。您的上述代码未显示任何错误。通常,你检查你的代码部分。你接受变量'numberInFile'。有时,您的文件阅读器会使用'whitespace或String或e.t.c'。首先你检查这个输出。你把手动数据放到这个变量并检查输出。如果它工作正常,你可以纠正这个功能。
答案 1 :(得分:1)
好的,首先,让我们回顾一下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
,而不是从1
循环到n
。
有了这个,让我们来解决你为什么得到错误的答案(顺便说一下,它与循环没有任何关系)。重写为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());
在循环运行之前,该行只执行一次。如果你想在每次用户猜出一个数字时加载下一个数字,你需要在循环中移动它。我将把它作为练习留给读者。
答案 2 :(得分:-1)
您实际上并未捕获用户输入的号码。试试这个:
int userNumber = Integer.parseInt(KeyIn.readLine());