Java程序在“之后卡住”;至于;环

Java程序在“之后卡住”;至于;环,java,arrays,string,for-loop,Java,Arrays,String,For Loop,我的Java程序似乎在执行for循环后卡住了。它并没有陷入循环,但由于某种原因,程序只是不想走得更远。但是,它成功地完成了循环: public static void main(String[] args){ String[] command = new String[20]; Scanner a = new Scanner(System.in); for (int i = 0; a.hasNext(); i++) { command[i] = a.nex

我的Java程序似乎在执行
for循环后卡住了。它并没有陷入循环,但由于某种原因,程序只是不想走得更远。但是,它成功地完成了循环:

public static void main(String[] args){
    String[] command = new String[20];
    Scanner a = new Scanner(System.in);
    for (int i = 0; a.hasNext(); i++) {
        command[i] = a.next();
        System.out.println(i);
    }
    a.close();
    System.out.println("asd");
}
如果您输入1个单词,此程序将打印出
“0”
,如果输入2,此程序将打印出
“0 1”
,依此类推,但是
System.out.println(“asd”)
永远不会执行,而且程序也永远不会停止。

欢迎使用StackOverflow:)

循环
for
的执行永远不会结束,因为
a.hasNext()
总是
true
。因此,循环永远不会满足终止条件。因此,您必须在某个点使用
break
(输入为ex.
“EXIT”
)来退出无止境循环或设置允许的最大
i
-您不是指
命令.length
来填充数组值吗

for (int i = 0; i < command.length; i++) {
    command[i] = a.next();
    System.out.println(i);
}
for(int i=0;i
欢迎来到StackOverflow:)

循环
for
的执行永远不会结束,因为
a.hasNext()
总是
true
。因此,循环永远不会满足终止条件。因此,您必须在某个点使用
break
(输入为ex.
“EXIT”
)来退出无止境循环或设置允许的最大
i
-您不是指
命令.length
来填充数组值吗

for (int i = 0; i < command.length; i++) {
    command[i] = a.next();
    System.out.println(i);
}
for(int i=0;i
程序永远不会终止,因为
System.in
从未关闭,因此
hasNext()
将始终为真,循环永远不会结束

相反,您可以要求用户输入特定字符以退出程序

public static void main(String[] args) {
        String[] command = new String[20];
        Scanner a = new Scanner(System.in);
        for (int i = 0; a.hasNext(); i++) {
            command[i] = a.next();
            System.out.println(i);
            System.out.println("Do you want to continue? y/n");
            if(a.next().equals("n")){
                break;
            }
        }
        a.close();
        System.out.println("asd");
    }

程序从未终止,因为
System.in
从未关闭,因此
hasNext()
将始终为真,循环将永远不会结束

相反,您可以要求用户输入特定字符以退出程序

public static void main(String[] args) {
        String[] command = new String[20];
        Scanner a = new Scanner(System.in);
        for (int i = 0; a.hasNext(); i++) {
            command[i] = a.next();
            System.out.println(i);
            System.out.println("Do you want to continue? y/n");
            if(a.next().equals("n")){
                break;
            }
        }
        a.close();
        System.out.println("asd");
    }

检查for循环中的退出条件

!a、 next().equals(“n”)


检查for循环中的退出条件

!a、 next().equals(“n”)


该问题是由于程序再次等待您的输入而导致的,它从未被卡住。此外,只有当超过数组大小(即用户输入的令牌超过20个)时,您的代码才会以异常(
ArrayOutOfBoundException
)终止

如果要捕获数组索引中的每个单词,请使用

String[]命令=a.split(“”)


这甚至可以避免导致不必要混乱的for循环。

问题是由于程序再次等待您的输入而导致的,它从未被卡住。此外,只有当超过数组大小(即用户输入的令牌超过20个)时,您的代码才会以异常(
ArrayOutOfBoundException
)终止

如果要捕获数组索引中的每个单词,请使用

String[]命令=a.split(“”)


这甚至可以避免for循环造成不必要的混乱。

change
a.hasNext()通过
i没有执行此操作,问题仍然存在,但无论如何还是要感谢:)您能告诉我们您的错误吗?如果您尝试的代码,我相信这不会导致任何问题我没有任何运行时错误或其他任何东西,代码不会停止运行,但是for循环执行得很好。尼古拉斯的也一样solution@Oceanis:由于您可以使用
系统。在
中,您必须向控制台提供输入-是否?程序停止在
命令[i]=a.next()
行,直到出现输入。更改
a.hasNext()通过
i没有执行此操作,问题仍然存在,但无论如何还是要感谢:)您能告诉我们您的错误吗?如果您尝试的代码,我相信这不会导致任何问题我没有任何运行时错误或其他任何东西,代码不会停止运行,但是for循环执行得很好。尼古拉斯的也一样solution@Oceanis:由于您可以使用
系统。在
中,您必须向控制台提供输入-是否?程序停止在
命令[i]=a.next()
行,直到出现输入。问题中没有终止循环的要求问题中没有终止循环的要求问题中没有终止循环的要求问题中没有终止循环的要求问题中没有终止循环的要求问题中没有终止循环的要求