如何从int []数组返回正确的值?

时间:2018-08-29 10:14:49

标签: java arrays loops if-statement

我是Java(和一般编程领域)的新手,如果其中的某些道理没有道理和/或代码真的很糟糕,那么请您道歉:

我正在尝试从用户输入中获得唯一的四位数代码(这就是Keyboard.readInput行所做的事情),并且我输入了一些条件语句来确保输入的代码只能是4位数字,并且每个数字必须与其他三个数字不同。

if语句按预期的方式工作,因为它们输出错误消息并提示它们重新输入(即,调用方法getPlayerGuess())。例如,如果用户输入123(即userGuess.length() != 4),它将提示他们再次输入。如果他们随后输入1234,则方法将完成。

但是,我遇到的问题是,当我在我拥有的另一个类中调用此方法时,要拉入的代码是输入的第一个代码(即123),而不是我想要的四位数(即1234) )-生成数组IndexOutOfBoundsException

关于如何确保所返回的代码是通过条件代码的四位数字而不是输入的第一个数字的任何想法?

public int[] getPlayerGuess() {

    System.out.print("Guess a four digit code: ");
    String userGuess = Keyboard.readInput();

    if (userGuess.length() != 4) {
        System.out.print("Your code must be 4 digits - ");
        getPlayerGuess();
    }

    int[] userCode = createArrayFromGuess(userGuess);

    for (int i = 0; i < userCode.length-1; i++){
        for (int j = i+1; j < userCode.length; j++){
            if (userCode[i] == userCode[j]) {
                System.out.print("Code must have four unique digits - ");
                getPlayerGuess();
            }
        }
    }
    return userCode;
}

2 个答案:

答案 0 :(得分:0)

您的问题就在这里

if (userGuess.length() != 4) {
      System.out.print("Your code must be 4 digits - ");
      getPlayerGuess();
    }

是的,您第二次调用该方法,但是您完全忽略了该方法,并且对结果不做任何事情。

将其更改为此:

if (userGuess.length() != 4) {
      System.out.print("Your code must be 4 digits - ");
      return getPlayerGuess();
    }

因此,您将返回新调用的结果,而不是在if块之后完成代码。

编辑: 更好的方法是:

System.out.print("Guess a four digit code: ");
String userGuess = Keyboard.readInput();

  while(userGuess.length() != 4) {
      System.out.print("Your code must be 4 digits - ");
      System.out.print("Guess a four digit code: ");
      userGuess = Keyboard.readInput();
    }

答案 1 :(得分:0)

您调用getPlayerGuess()会返回一个int[],但是您不会收集也不分配返回值。您也不会退回它...因此以下内容可能对您有用:

public int[] getPlayerGuess() {

  System.out.print("Guess a four digit code: ");
  String userGuess = Keyboard.readInput();

  if (userGuess.length() != 4) {
    System.out.print("Your code must be 4 digits - ");
    return getPlayerGuess(); // either assign or return the value that is actually calculated within that call...
  }

  int[] userCode = createArrayFromGuess(userGuess);

  for (int i = 0; i < userCode.length-1; i++){
      for (int j = i+1; j < userCode.length; j++){
          if (userCode[i] == userCode[j]) {
              System.out.print("Code must have four unique digits - ");
              return getPlayerGuess(); // either assign or return the value that is actually calculated within that call...
          }
      }
  }
  return userCode;
}

稍微简化代码(不要太多;-))

public int[] getPlayerGuess(String msg) {
    System.out.print(msg);
    String userGuess = Keyboard.readLine();
    if (userGuess.length() != 4) {
        return getPlayerGuess("\nYour code must be 4 digits - ");
    }
    if (userGuess.chars().distinct().count() != 4) {
        return getPlayerGuess("\nCode must have four unique digits - ");
    }
    return createArrayFromGuess(userGuess);
}

初始呼叫为:

getPlayerGuess("Guess a four digit code: ");

请注意,您也可以使用迭代方法来编写此代码。但我会留给你。