【问题标题】:Switch - Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0开关 - 线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:0
【发布时间】:2017-02-10 13:12:53
【问题描述】:

我在这个测试用例程序中有这个问题:

package testecase;

public class TesteCase {
    public static void main(String args []) {
        // TODO code application logic here
        switch (args [0] .charAt (0)) {
        case 'A':System.out.println("Vogal A ");
        break;

        case 'E':System.out.println("Vogal E ");
        break;

        default:System.out.println("Não é vogal ");

        }
    }
}

我该如何解决?

【问题讨论】:

  • 你在运行代码时是否传递了args?
  • 检查 args.lenght >0
  • 只需将 arg 传递给您的程序。 java TestCase Abc 例如在第一种情况下输入
  • 一般提示:您应该添加一个检查参数是否已实际传递。 永远不要“信任”用户输入!一种常见的做法是输出"usage" - Message 并退出。
  • 如果您在 Eclipse 之类的 IDE 中运行它,您需要在运行配置中添加参数。或者,如果您是从命令行运行它,那么您可以使用 java TestCase yourstring

标签: java exception switch-statement


【解决方案1】:

异常告诉您在运行时您的args 数组没有任何条目。

你可以通过像这样调用 JVM 来改变它

java TestCase A B C 

换句话说:该数组保存您在启动 JVM 时提供给它的参数。命令行上没有参数...以一个空数组结束。

或给出另一种观点:您的代码包含关于传入数据的两个假设:

  1. 使用args [0] 要求数组至少有一个条目
  2. 使用....charAt(0) 要求第一个条目至少是一个字符

猜猜看:这不一定是真的!

您学到了关于编程的第一堂非常有价值的课程:不要期望运行时的“现实”与您的假设相匹配应该

含义:当数据从外部传入时,第一步是验证它是否符合您的期望。喜欢:

if (args.length > 0) {
 ... process input
} else {
 tell user: no input

与您打算执行的字符串处理类似!

【讨论】:

  • 谢谢兄弟!很有帮助=D
  • 不客气。随时接受:-)
【解决方案2】:

确保在运行程序时向程序发送参数:java TesteCase A

另外,一般来说,你不应该相信用户输入,所以我建议你先检查 args 的长度。一旦你知道它不是空的,你就可以尝试阅读它。

【讨论】:

    猜你喜欢
    • 2011-09-09
    • 2014-12-06
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2012-04-06
    相关资源
    最近更新 更多