使用do / while我的代码中的错误

时间:2014-03-28 14:55:42

标签: java

我是学生(大时代“新手”)学习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);          
    }
}

3 个答案:

答案 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 clavierint 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值然后使用它们。