Do While循环第二次与扫描仪不协调

时间:2019-08-11 15:19:49

标签: java java.util.scanner do-while

我有一个需要帮助的项目。我是编程的初学者,对此我不太理解。我希望得到答案。

Scanner reg_input = new Scanner(System.in);
    int ctr = 0,item = 1;
    char reg_mn = 'y', choice;
    String[] user = new String[item];
    String[] pass = new String[item];
    reg_mn = 'y';
    do {
        System.out.println("[REGISTER]");
        System.out.println("==========");
        System.out.print("Username: ");
        user[ctr] = reg_input.next(); //Line 11
        System.out.print("Password: ");
        pass[ctr] = reg_input.next();
        System.out.println("==========");

        System.out.println("Do you wish to Continue? [Y/N]");
        choice = reg_input.next().charAt(0);

            if (choice == 'y' || choice =='y') {
                item = item + 1;
            } 
            else if (choice == 'n' || choice == 'N') {
                reg_mn = 'n';
                item = item + 1;
                return;

            }

        ctr++;
    } while (reg_mn == 'y' || reg_mn == 'Y');
  

第一个循环很好。这里的问题是当我键入“ y”   尝试获取第二个循环,我从第11行的扫描仪收到一个错误

  • 我已经研究过类似的问题,但是我似乎死胡同了,或者我没有正确阅读它。

1 个答案:

答案 0 :(得分:1)

因为您声明的字符串的大小最初为1。 因此,如果您将项目增加1,但字符串数组的大小将不会增加,因为它以大小1声明。​​

String[] user = new String[item];
String[] pass = new String[item];

像这样改变

String[] user = new String[30];
String[] pass = new String[30];

您必须声明一些最大大小。

我建议您使用任何 java集合,例如 HashMap 。 因为在这里您声明的是最大大小的字符串数组,所以它分配了该大小,但是如果仅存储2个用户,则剩余大小将被浪费。为此,请使用“收藏夹”。