2017-02-10 138 views
0

从来就这个问题在这个测试用例计划:开关 - 异常线程“main” java.lang.ArrayIndexOutOfBoundsException:0

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 "); 

     } 
    } 
} 

我该如何解决呢?

+0

当您运行代码时,您是否传递参数? – Gatusko

+1

check args.lenght> 0 –

+0

只是将一个arg传递给你的程序。例如在第一种情况下输入'java TestCase Abc' – davidxxx

回答

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 

与您打算做的String处理类似!

+0

谢谢兄弟!帮助很多= D –

+0

非常欢迎。欢迎随时接受:-) – GhostCat

0

请确保您正在运行时,它发送一个参数传递给你的程序:java TesteCase A

而且,在一般情况下,你不应该相信用户输入,所以我建议你先检查args来lenght。一旦你知道它不是空的,你可以尝试阅读它。

相关问题