我正在为一所学校的项目工作,并且我目前正处于困境。当我运行我的项目时,VM似乎陷入循环并且不会加载(应该弹出一个控制台,允许我输入CombinationLock类setDigit()
方法的字符)。我相信它与我的Interface.java
课程中的for循环有关。如果有人能够看一眼并引导我朝着正确的方向前进,那将非常感激。非常感谢!
Interface.java
import java.util.*;
public class Interface
{
public static void main() {
Scanner in = new Scanner(System.in);
CombinationLock combo = new CombinationLock();
for(int i = 0; i < 3; i++) {
String ltr = in.nextLine();
combo.setDigit(ltr.charAt(0), i);
System.out.println("Digit " + i + " has been set to " + ltr);
}
}
}
CombinationLock.java
public class CombinationLock
{
String[] combo = new String[3];
public CombinationLock() { }
public boolean setDigit(char letter, int index) {
if (Character.isDigit(letter)) {
return false;
}
combo[index] = String.valueOf(letter);
return true;
}
public boolean unlock(String combo) {
if (combo.length() > 3) {
return false; //Longer then it can be, not valid
}
char[] comboArray = combo.toCharArray();
for (char c : comboArray) {
if (Character.isDigit(c)) {
return false; //Contains numbers, not valid
}
}
boolean valid = true;
for (int i = 0; i < 3; i++) {
if (combo.charAt(i) != comboArray[i] && valid == true) {
valid = false;
break;
}
}
return valid;
}
}
答案 0 :(得分:2)
您已在combo
类中初始化CombinationLock
数组,其中0
长度为String[] combo = {};
。当您致电ArrayIndexOutOfBoundsException
时,这会导致combo.setDigit(ltr.charAt(0), i);
。请更正初始化。我相信您想要捕获3个输入,在这种情况下,请在combo
中初始化CombinationLock
,长度为3,如下所示:
String[] combo = new String[3];
答案 1 :(得分:1)
您的问题是(主要方法的签名错误)
public static void main() {
应该是
public static void main(String[] args) {
答案 2 :(得分:0)
我发现我的错误在哪里,使用BlueJ IDE必须在控制台显示之前输出一些内容并允许您输入数据,因此它从未弹出,因为我从未使用System.out.println
或{ {1}}。执行此操作后,控制台弹出并允许我输入数据。感谢您的所有建议和帮助!