我是学生(大时代“新手”)学习java。以下两个例子实际上是家庭作业。示例1是猜卡(黑色或红色)的游戏,示例2是摇滚,纸张,剪刀的游戏。
我在这个网站上搜索了答案,我所看到的答案与我们在我们的课程中的位置脱节。在这一点上,我们在做/同时,同时& for loops。
这是我想出的代码(对我而言,这不是一件小事),我想对此进行调查。我不关心提高效率或类似的东西。我更关心它的工作原理。我正在使用netbeans,我把(< ---)放在似乎有问题的地方。你的帮助会非常受欢迎。提前致谢。
P.S。该课程是法语,所以如果一些变量名称没有意义,不要惊讶。
EX1 ---------------------------------------------- --------------------------------------
package devoir.pkg3;
import java.util.Scanner;
public class Dev3Ex4 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
char r = 'r', n = 'n', q = 'q';
int i, compteur = 0, compteurDeux = 0;
do {
System.out.println("Deviner la couleur de la carte. \"r\" rouge, \"n\" noire et \"q\" quitter.");
char clavier = scanner.next().charAt(0);
i = (int) (2.0 * Math.random());
compteur = compteur + 1;
if (i == 0) {
char tmp = 'n';
}
if (i == 1) {
char tmp = 'r';
}
if (clavier == tmp) { <------ (temp value error)
compteurDeux = compteurDeux + 1;
System.out.println("Bon choix ! Score: " + compteurDeux + "/" + compteur);
}
if (clavier != tmp) { <------ (temp value error)
System.out.println("Non...Score: " + compteurDeux + "/" + compteur);
}
} while (clavier != 'q'); <------ (clavier value error)
System.out.println("Votre score final est " + compteurDeux + "/" + compteur);
}
}
EX2 ---------------------------------------------- --------------------------------------
package devoir.pkg3;
import java.util.Scanner;
public class Dev3Ex5 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
char q = 'q';
int i, compteur = 0, compteurDeux = 0;
do {
System.out.println("Jouons a Roche/papier/ciseaux. \"r\" roche, \"p\" papier. \"c\" ciseax et \"q\" quitter.");
char clavier = scanner.next().charAt(0);
i = (int) (3.0 * Math.random());
if (clavier == 'r') {
int tmp = 0;
}
if (clavier == 'c') {
int tmp = 1;
}
if (clavier == 'p') {
int tmp = 2;
}
if (tmp == 0 && i == 1 || tmp == 1 && i == 2 || tmp == 2 && i == 0) {<--(All tmp values error)
compteur = compteur + 1;
System.out.println("Bon choix ! Score: " + compteur + "/" + compteurDeux);
}
if (tmp == 1 && i == 0 || tmp == 2 && i == 1 || tmp == 0 && i == 2) {<--(All tmp values error)
compteurDeux = compteurDeux + 1;
System.out.println("Non...Score: " + compteur + "/" + compteurDeux);
}
if (tmp == i) { <--(tmp value error)
System.out.println("Parti nul. Score " + compteur + "/" + compteurDeux);
}
} while (clavier != 'q'); <--(clavier value error)
System.out.println("Votre score final est " + compteur + "/" + compteurDeux);
}
}
答案 0 :(得分:1)
代码块中的局部变量声明存在问题
if (i == 0) {
char tmp = 'n';
}
if (i == 1) {
char tmp = 'r';
}
将其更改为:
char tmp='';
if (i == 0) {
tmp = 'n';
}
if (i == 1) {
tmp = 'r';
}
char clavier
和int tmp
相同 - 声明&amp;在使用它们之前首先定义它们,通常在函数的开头,以便所有变量都在一个地方。
注意:这被认为是在方法和类块顶部定义变量的最佳实践。
答案 1 :(得分:0)
您的问题是范围之一:当您在if {}块内定义char tmp = 'n'
时,该变量tmp可用于该块内的 。您需要在if语句系列之外定义char tmp,然后只需在其中指定其值,例如:
char tmp = ' ';
if (i == 0) {
tmp = 'n';
}
else if (i == 1) {
tmp = 'r';
}
等
两个示例中的clavier变量都是相同的,它们在do {}块中声明,因此只能在该块内部使用,而不是在块的控件中。
答案 2 :(得分:0)
1.必须在块外声明char tmp
,如下所示。
char tmp;
if (i == 0) {
tmp = 'n';
}
if (i == 1) {
tmp = 'r';
}
与clavier
相同,必须在do
之外声明才能在while条件中使用。
char clavier
do{
2.与第二个程序同名。在外面声明tmp值然后使用它们。