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

Java 如何从int[]数组返回正确的值?,java,arrays,loops,if-statement,Java,Arrays,Loops,If Statement,我对Java(以及一般的编程)不熟悉,因此,如果其中一些不合理和/或代码非常糟糕,我深表歉意: 我正在尝试从用户输入中获取唯一的四位代码(这就是键盘.readInput行所做的),并且我加入了两个条件语句,以确保输入的代码只能是4位,并且每个数字必须与其他三位不同 if语句按照预期的方式工作,即它们输出错误消息并提示它们重新输入(即调用方法getPlayerGuess())。例如,如果用户输入123(即userGuess.length()!=4),它将提示他们再次输入。如果他们随后输入1234,

我对Java(以及一般的编程)不熟悉,因此,如果其中一些不合理和/或代码非常糟糕,我深表歉意:

我正在尝试从用户输入中获取唯一的四位代码(这就是
键盘.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;
}
public int[]getPlayerGuess(){
系统输出打印(“猜一个四位数的代码:”);
字符串userGuess=Keyboard.readInput();
if(userGuess.length()!=4){
System.out.print(“您的代码必须是4位-”);
getPlayerGuess();
}
int[]userCode=createArrayFromGuess(userGuess);
for(int i=0;i
您的问题在于:

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();
    }

调用
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;
}
初始呼叫为:

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

请注意,您也可以使用迭代方法编写此代码。但是我将把这个问题留给您。

递归调用
getPlayerGuess()
的问题在于您只是在丢弃返回值。递归调用也没有什么意义:循环直到数组有效。非常感谢-现在我需要实际返回新调用的结果才能使用它。非常感谢-现在我需要实际返回新调用的结果才能使用它。感谢您提供的关于如何简化代码的提示,现在看起来更简洁了。
getPlayerGuess("Guess a four digit code: ");