【问题标题】:java.lang.Error: Unresolved compilation problems Duplicate local variable [duplicate]java.lang.Error:未解决的编译问题重复的局部变量[重复]
【发布时间】:2020-06-03 23:12:29
【问题描述】:

您好,我收到此错误消息(可能由最后一种方法“choixNumerote”引起):

 java.lang.Error: Unresolved compilation problems: 
    Duplicate local variable tabJoueur
    Syntax error on token "i", delete this token
    sc cannot be resolved

有什么帮助吗?

代码如下:

import java.util.Scanner;

public class Mastermind_ho {
    static String [] TAB_REF_COLORS = {"rouge","jaune","vert","bleu","orange","blanc","violet","fuchsia"};
    static int NB_COLORS = 4;
    static int compteur=0;

    public static void main(String[] args) {

        Scanner sc=new Scanner(System.in);
        String [] combinaisonSecrete = generateRandomCombination();
        for(int i=0;i<4;i++) {
            System.out.println(combinaisonSecrete[i]);
        }

        String [] combinaisonJoueur = choixNumerote();
        for(int i=0;i<4;i++) {
            System.out.println(combinaisonJoueur[i]);
        }

        sc.close();
    }

    // Generate random combination of 4 colors 
    static String [] generateRandomCombination() {
        String [] combination = new String[NB_COLORS];
        int currentPosition = 0;
        while(currentPosition!=NB_COLORS) {
            int indexRandom = (int)(Math.random()*TAB_REF_COLORS.length);
            String color = TAB_REF_COLORS[indexRandom];
            if(!isIn(color, combination)) {
                combination[currentPosition] = color;
                currentPosition++;
            }
        }
        return combination;
    }

    static boolean isIn(String iStringToFind, String [] iTab) {
        int size = iTab.length;
        for(int i=0;i<size;i++) {
            if(iStringToFind.equalsIgnoreCase(iTab[i])) return true;
        }
        return false;
    }

    static String [] choixNumerote() {
        String [] tabJoueur = new String[NB_COLORS];
        for(int i=0;i<NB_COLORS;i++) {
            System.out.println("Choisissez une couleur :");
            String tabJoueur[i]=sc.nextLine();
        }
        compteur++;
        return tabJoueur;
        System.out.println("Il te reste : " + (12-compteur) + "tentative(s)");
    }

}

【问题讨论】:

    标签: java


    【解决方案1】:
    String [] tabJoueur = new String[NB_COLORS];
    for(int i=0;i<NB_COLORS;i++) {
        System.out.println("Choisissez une couleur :");
        String tabJoueur[i]=sc.nextLine();
    }
    

    您再次使用类型String 声明了tabJueur。更正一下:

    String [] tabJoueur = new String[NB_COLORS];
    for(int i=0;i<NB_COLORS;i++) {
        System.out.println("Choisissez une couleur :");
        tabJoueur[i]=sc.nextLine();
    }
    

    此外,您应该学会相信编译器的错误消息,因为它清楚地告诉您问题所在。

    【讨论】:

    • 谢谢@Steyrix,但删除“String”后出现另一条错误消息:线程“main”java.lang.Error中的异常:未解决的编译问题:sc无法在Mastermind_ho.choixNumerote(Mastermind_ho .java:67) 在 Mastermind_ho.main(Mastermind_ho.java:34)
    【解决方案2】:

    很简单,从String tabJoueur[i]=sc.nextLine();中删除String

    【讨论】:

    • 我删除了字符串,但在同一行中收到了另一条错误消息:“线程“main”中的异常 java.lang.Error:未解决的编译问题:sc 无法在 Mastermind_ho.choixNumerote(Mastermind_ho. java:67) 在 Mastermind_ho.main(Mastermind_ho.java:34)"
    • 如果你注意到String tabJoueur[i]=sc.nextLine(); 看起来正常,这个方法中还有哪里声明了sc?它不存在。你可以做的是将扫描仪作为参数传递static String choixNumerote(Scanner sc) {,然后在你的main方法String [] combinaisonJoueur = choixNumerote(sc);
    • 事实上,它是“仅”写最后一条指令的顺序......这个Java很奇怪,不是吗?我已经写了这个并且它有效:compteur++; System.out.println("Il te reste :" + (12-compteur) + " tentative(s)");返回tabJueur;而不是:compteur++;返回tabJueur; System.out.println("Il te reste :" + (12-compteur) + "tentative(s)");谢谢你的回答
    • 哦,是的,我没看到,你不应该在 return 语句之后做任何操作,但是你的编译器应该告诉你吗?使用intellij。不用担心,我不是 java tbh 的粉丝:D
    • 但是我在代码的顶部声明了它。还不够吗?导入 java.util.Scanner;公共类 Mastermind_ho { 静态扫描仪 sc = 新扫描仪(System.in);静态字符串 [] TAB_REF_COLORS = {"rouge","jaune","vert","bleu","orange","blanc","violet","fuchsia"};静态 int NB_COLORS = 4;静态 int compteur=0;
    猜你喜欢
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 2014-01-24
    • 2014-05-08
    • 2017-07-16
    • 2019-12-10
    • 1970-01-01
    • 2012-06-28
    相关资源
    最近更新 更多