Java Can';在我的代码中找不到bug

Java Can';在我的代码中找不到bug,java,Java,我正试图完成我的作业,但我似乎找不到代码中的错误。这不是一个编译器错误,我已经看了几个小时了 这段代码是为一个叫做“智囊团”的游戏编写的。以下是指导原则(我知道有点长,但所有作业所需的信息): 计算机随机选择一个4位数字,任何数字都不能重复。(例如:046229306103为有效数字) 用户的目标是尝试猜测计算机选择的数字 一旦用户做出猜测,计算机将通过提供以下信息告知用户该猜测的等级: 完全匹配的位数(在正确的位置) 不正确的位数 当您扫描来自用户的输入时,请使用字符串来存储它。你的 程序除主

我正试图完成我的作业,但我似乎找不到代码中的错误。这不是一个编译器错误,我已经看了几个小时了

这段代码是为一个叫做“智囊团”的游戏编写的。以下是指导原则(我知道有点长,但所有作业所需的信息):

  • 计算机随机选择一个4位数字,任何数字都不能重复。(例如:046229306103为有效数字)

  • 用户的目标是尝试猜测计算机选择的数字

  • 一旦用户做出猜测,计算机将通过提供以下信息告知用户该猜测的等级: 完全匹配的位数(在正确的位置) 不正确的位数

  • 当您扫描来自用户的输入时,请使用字符串来存储它。你的 程序除主要方法外,还必须有4种方法:

    • 一个名为isValidNumber的方法,用于检查给定字符串是否对应于有效的4位数字

    • 一个名为perfectMatches的方法返回表示有效4位数的两个字符串之间的完全匹配数

    • 一个名为offPlaceMatches的方法,返回表示有效4位数字的两个字符串之间的“offplace”匹配数 数字

    • 一个名为generateRandomValidNumber的方法返回表示随机有效4位数的字符串

    提示:通过生成一个随机的单数来生成一个随机的4位数 数字4倍,并将它们连接起来。然后使用您的iValidNumber 方法,检查您创建的此字符串是否有效。如果没有,, 重复第一部分,然后选择4个新的随机数字

    这是我的代码:

    import java.util.Scanner;
    
    public class Question1 {
    
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            //print welcome, what 4 digit number do you guess...
            System.out.println("Welcome to Mastermind.");
            System.out.println("I have a 4 digit number in mind. Can you guess it?");
            System.out.println("");
            System.out.println("What is your guess?");
            //string guess is number that is scanned
            String guess = input.nextLine();
            String validNumber = generateValidNumber();
            System.out.print("Perfect matches: " + perfectMatches(guess, validNumber));
            System.out.println("off place: " + offPlaceMatches(guess, validNumber));
    
            while(!(perfectMatches(guess, validNumber) == 4)) {
                System.out.println("");
                System.out.println("What is your guess?");
                guess = input.nextLine();
                validNumber = generateValidNumber();
                System.out.print("Perfect matches: " + perfectMatches(guess, validNumber));
                System.out.println("off place: " + offPlaceMatches(guess, validNumber));
            }
    
            System.out.println("Yes! You guessed my number correctly. Well done.");
    
        }
    
        static boolean isValidNumber(String number) {
            if(number.length() != 4) {
                return false; }
            char[] numberArray = new char[4];
    
            for (int i = 0; i < 4; i++) {
                numberArray[i] = number.charAt(i);
                if(!((number.charAt(i) <= '9') && (number.charAt(i) >= '0'))) {
                    return false;
                }
            }
    
            for (int i = 0; i < 4; i++) {
                char c = numberArray[i];
                int count = 0;
                for(int j = 0; j < 4; j++)
                    if(numberArray[j] == c)
                        count++;
                if(count > 1) {
                    return false;
                }
            }
            return true;
        }
    
        static int perfectMatches(String one, String two) {
            int counter = 0;
            for(int i = 0; i < one.length(); i++) {
                if(one.charAt(i) == two.charAt(i)) {
                    counter++;
                }
            }
            return counter;
        }
    
        static int offPlaceMatches(String one, String two) {
            int counter = 0;
            for(int i = 0; i < 4; i++) {
                for(int j = 0; j < 4; j++) {
                    if(i == 0)
                        continue;
                    if(one.charAt(j) == two.charAt(i)) {
                        counter++;
                    }
                    if(j == i -1) {
                        i++;
                    }
                }
    
            }
            return counter;
        }
    
        static String generateValidNumber() {
            boolean validNumber = false;
            String newNumber = "";
            while(!validNumber) {
                for(int i = 0; i < 4; i++) {
                    char c = (char) (int) (Math.random() * (9));
                    newNumber = newNumber + c;
                }
                if(isValidNumber(newNumber))
                    validNumber = true;
            }
            return newNumber;
        }
    }
    
    import java.util.Scanner;
    公开课问题1{
    公共静态void main(字符串[]args){
    扫描仪输入=新扫描仪(System.in);
    //打印欢迎,你猜4位数是多少。。。
    System.out.println(“欢迎来到智囊团”);
    System.out.println(“我脑子里有一个4位数的数字,你能猜出来吗?”);
    System.out.println(“”);
    System.out.println(“你猜怎么着?”);
    //字符串猜测是扫描的数字
    字符串guess=input.nextLine();
    字符串validNumber=generateValidNumber();
    System.out.print(“完美匹配:+perfectMatches(guess,validNumber));
    System.out.println(“off-place:+off-placematches(guess,validNumber));
    while(!(perfectMatches(猜测,validNumber)==4)){
    System.out.println(“”);
    System.out.println(“你猜怎么着?”);
    guess=input.nextLine();
    validNumber=generateValidNumber();
    System.out.print(“完美匹配:+perfectMatches(guess,validNumber));
    System.out.println(“off-place:+off-placematches(guess,validNumber));
    }
    System.out.println(“是的!你猜对我的号码了。干得好。”);
    }
    静态布尔值isValidNumber(字符串编号){
    如果(number.length()!=4){
    返回false;}
    char[]numberArray=新字符[4];
    对于(int i=0;i<4;i++){
    numberArray[i]=number.charAt(i);
    如果(!((数字字符(i)='0')){
    返回false;
    }
    }
    对于(int i=0;i<4;i++){
    char c=numberArray[i];
    整数计数=0;
    对于(int j=0;j<4;j++)
    if(numberArray[j]==c)
    计数++;
    如果(计数>1){
    返回false;
    }
    }
    返回true;
    }
    静态int perfectMatches(字符串1、字符串2){
    int计数器=0;
    对于(int i=0;i<1.length();i++){
    如果(一个字符(i)=两个字符(i)){
    计数器++;
    }
    }
    返回计数器;
    }
    静态int offPlaceMatches(字符串1、字符串2){
    int计数器=0;
    对于(int i=0;i<4;i++){
    对于(int j=0;j<4;j++){
    如果(i==0)
    继续;
    如果(一个字符(j)=两个字符(i)){
    计数器++;
    }
    如果(j==i-1){
    i++;
    }
    }
    }
    返回计数器;
    }
    静态字符串generateValidNumber(){
    布尔值validNumber=false;
    字符串newNumber=“”;
    而(!validNumber){
    对于(int i=0;i<4;i++){
    charc=(char)(int)(Math.random()*(9));
    newNumber=newNumber+c;
    }
    if(isValidNumber(newNumber))
    validNumber=true;
    }
    返回newNumber;
    }
    }
    
    您似乎在每个周期生成一个新编号。解决此问题的最佳方法是,不要在每个循环上分配
    main(…)
    内的
    validNumber
    变量


    由于您到达“您的猜测是什么?”的点,然后输入一个数字,但随后没有发生任何情况(这可能意味着您不会在第一行
    guest=input.nextLine();
    call之后通过这两行),首先检查的函数是
    generateValidNumber()函数。第二,检查你的
    perfectMatches(…)函数。您可以添加
    System.out.println(“blah”)调用以查看代码的运行情况(作为一个非常粗糙的调试工具)。

    我假设您正在使用Eclipse,并且正在学习编程入门课程。编程课程中经常忽略的一个重要主题是如何使用调试器帮助您解决问题。如果您的任何同学、实验室助理或专业较深的同学可以花15-30分钟坐下来向您展示如何使用调试器,那么它将帮助您度过余下的编程生涯<
    static String generateValidNumber() {
        boolean validNumber = false;
        String newNumber = null;
        while(!validNumber) {
            // add this line
            newNumber = "";
            for(int i = 0; i < 4; i++) {
                char c = (char) ('0' + (Math.random() * 10));
                newNumber = newNumber + c;
            }
            if(isValidNumber(newNumber))
                validNumber = true;
        }
        return newNumber;
    }
    
    import java.util.Scanner;
    
    public class MastremindString {
    
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            // print welcome, what 4 digit number do you guess...
            System.out.println("Welcome to Mastermind.");
            System.out
                    .println("I have a 4 digit number in mind. Can you guess it?");
            System.out.println("");
            System.out.println("What is your guess?");
            // string guess is number that is scanned
            String guess = input.nextLine();
            String validNumber = generateValidNumber();
            System.out.print("Perfect matches: "
                    + perfectMatches(guess, validNumber));
            System.out.println("off place: " + offPlaceMatches(guess, validNumber));
    
            while (!(perfectMatches(guess, validNumber) == 4)) {
                System.out.println("");
                System.out.println("What is your guess?");
                guess = input.nextLine();
                System.out.print("Perfect matches: "
                        + perfectMatches(guess, validNumber));
                System.out.println("off place: "
                        + offPlaceMatches(guess, validNumber));
            }
    
            System.out.println("Yes! You guessed my number correctly. Well done.");
    
        }
    
        static boolean isValidNumber(String number) {
            if (number.length() != 4) {
                return false;
            }
            char[] numberArray = new char[4];
    
            for (int i = 0; i < 4; i++) {
                numberArray[i] = number.charAt(i);
                if (!((number.charAt(i) <= '9') && (number.charAt(i) >= '0'))) {
                    return false;
                }
            }
    
            for (int i = 0; i < 4; i++) {
                char c = numberArray[i];
                int count = 0;
                for (int j = 0; j < 4; j++)
                    if (numberArray[j] == c)
                        count++;
                if (count > 1) {
                    return false;
                }
            }
            return true;
        }
    
        static int perfectMatches(String one, String two) {
            int counter = 0;
            for (int i = 0; i < one.length(); i++) {
                if (one.charAt(i) == two.charAt(i)) {
                    counter++;
                }
            }
            return counter;
        }
    
        static int offPlaceMatches(String one, String two) {
            int counter = 0;
            for (int i = 0; i < one.length(); i++) {
                for (int j = 0; j < two.length(); j++) {
                    if (one.charAt(j) == two.charAt(i) && i != j) {
                        counter++;
                    }
                }
            }
            return counter;
        }
    
        static String generateValidNumber() {
            boolean validNumber = false;
            String newNumber = "";
            while (!validNumber) {
                newNumber = "";
                for (int i = 0; i < 4; i++) {
                    char c = (char) ('0' + (Math.random() * 10));
                    newNumber = newNumber + c;
                }
                if (isValidNumber(newNumber))
                    validNumber = true;
            }
            return newNumber;
        }
    }