2016-04-30 71 views
0

在下面的代码中,如何更改持续显示的消息(“C++”);根据数组的元素,根据 ?为什么会发生?为什么消息不会改变?NumberFormatException消息不会更改?

import java.util.*; 

public class Testslsl { 

    static Scanner input = new Scanner(System.in); 

    public static void main(String[] args) { 

     String languages[] = {"C", "C++", "Java", "Perl","Python" }; 

     int num; 

     for (int c = 0; c <= 5; c++) { 
      try { 
       System.out.println(languages[c]); 

       if (languages[c].charAt(2)=='+') 
        System.out.println("it is C plus plus"); 

       num = Integer.parseInt(languages[1]); 
      } 
      catch (NumberFormatException e) { 
       System.out.println(e); 
       input.next(); 
      } 
      catch (ArrayIndexOutOfBoundsException ex) { 
       System.out.println(ex); 
      } 
      catch (StringIndexOutOfBoundsException exp) { 
       System.out.println(exp); 
      } 
     } 
    } 
} 

输出:

C 
java.lang.StringIndexOutOfBoundsException: String index out of range: 2 
C++ 
it is C plus plus 
java.lang.NumberFormatException: For input string: "C++" 
Java 
java.lang.NumberFormatException: For input string: "C++" 
Perl 
java.lang.NumberFormatException: For input string: "C++" 
Python 
java.lang.NumberFormatException: For input string: "C++" 
java.lang.ArrayIndexOutOfBoundsException: 5 
+0

'语言[1]''是 “C++”',这不是一个'int'所以并不清楚你'num'期待什么样的价值。 –

+0

我知道,但为什么异常的消息(C++)不断显示,但元素更改! – user6162628

+0

一种是'语言[c]'另一种是'语言[1]',你是否看到了区别? –

回答

1

的信息是一样的,因为你总是获得languages[1],这始终是字符串C++

为了遍历您的数组中的其它元素,你需要用你的食指c

num = Integer.parseInt(languages[c]); 

不过,由于在评论中提到的,因为你有一个String数组,它不是不太清楚你为什么使用Integer.parseInt来获得int。它总是会导致NumberFormatException

相反,你应该有:

String language = languages[c]; 
+0

它是一个教程跟踪问题(家庭作业),所以,我不能更改代码,我可以吗?> _ < – user6162628

+0

@ user6162628,哦好吧...虽然这个问题没有提到。 :) – aribeiro