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