对于BlueJ中的循环输入(无限循环)

时间:2012-10-29 01:55:41

标签: java infinite-loop bluej

我正在为一所学校的项目工作,并且我目前正处于困境。当我运行我的项目时,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;
    }
}

3 个答案:

答案 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}}。执行此操作后,控制台弹出并允许我输入数据。感谢您的所有建议和帮助!