【发布时间】:2020-02-12 13:15:01
【问题描述】:
我做了一个猜谜游戏,我首先问: - 有多少玩家想玩这个游戏 - 分配所有玩家 - 开始按顺序猜数字 获胜者是猜对使用随机生成的数字的玩家
代码可以正常工作,但我担心一件事; 我需要先初始化guessingNumber 变量,这看起来有点奇怪,因为我需要输入我知道不会随机生成的任何数字,如果我只声明变量int guessingNumber 我会在这里出错
} while (los != guessingNumber); - guessingNumber is underlined with error :
局部变量guessingNumber可能没有初始化
您知道如何避免初始化 -1 位并使代码仍然有效吗?
public class kopia {
public static void main(String[] args) {
Random rand = new Random();
int los = rand.nextInt(11);
int numberofPlayers;
int guessingNumber= -1;
Scanner scan7 = new Scanner(System.in);
Scanner scan = new Scanner(System.in);
Scanner scan2 = new Scanner(System.in);
do {
System.out.println(" Type number of players :");
while (!scan7.hasNextInt()) {
System.out.println("Sorry, bad data");
scan7.next();
}
numberofPlayers = scan7.nextInt();
} while (numberofPlayers <= 0);
String gracze[] = new String[numberofPlayers];
int liczbaProbGraczy[] = new int[numberofPlayers];
for (int i = 1; i <= numberofPlayers; i++) { // ++1
System.out.println("Number of player " + i);
gracze[i - 1] = scan.nextLine();
}
do {
for (int j = 0; j < gracze.length; j++) {
System.out.println(" Now guesssing " + gracze[j]);
System.out.println("Guess number 0 do 10");
while (!scan2.hasNextInt()) {
System.out.println("Cannot recognize this number");
scan2.next();
}
guessingNumber = scan2.nextInt();
liczbaProbGraczy[j]++;
if (guessingNumber == los) {
System.out.println("Winner is " + gracze[j] + "\n");
for (int c = 0; c < gracze.length; c++) {
System.out.println("Number of try's " + gracze[c] + " equals " + liczbaProbGraczy[c]);
}
break;
}
}
} while (los != guessingNumber);
scan7.close();
scan.close();
scan2.close();
}
}
【问题讨论】:
-
就像一个注释,没有理由打开3个不同的
Scanner,你可以用同一个来做任何事情,有0区别。 -
感谢您的意见,我将仅使用 1 台扫描仪进行测试
-
gracze.length理论上可以为 0,跳过 for 循环并且不询问guessingNumber。所以必须在这里初始化。 -
@Tomek Młynarski 在函数(方法)中声明变量时,它不会获得默认值,您必须对其进行初始化。如果您在类级别声明变量,例如在您的情况下的函数之外,它将在创建实例时获得默认值。在你的情况下,如果你在函数之外定义它,它将得到 0。
-
@Tomek Młynarski 是的,声明它是静态的guessingNumber;在您的情况下,主要功能之外。