A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马杜鹏 中级黑马   /  2012-11-7 15:15  /  2162 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马杜鹏 于 2012-11-7 15:58 编辑

// 编写一应用程序,用来吧百分制成绩转换成等级制成绩。

public class GradeScore {
       public static void main(String[] args) {
       int score;
       char grade;
       score=Integer.parseInt(args[0]);
       if(score>=90)
           grade='A';
       else if(score>=80)
           grade='B';
       else if(score>=70)
           grade='C';
       else if(score>=60)
           grade='D';
       else
           grade='F';
       System.out.println("Score="+score+"Grade="+grade);
      
       }
      
}

代码可以编译,但是程序运行了怎么提示:  Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
                                                                      at GradeScore.main(GradeScore.java:7)
想问大家该怎么修改就可以成功运行,自己不太懂。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

8 个回复

倒序浏览
这是因为你是通过命令行传入参数的, score=Integer.parseInt(args[0]);
如果传入的参数不正确会产生NumberFormatException
你上面的异常是ArrayIndexOutOfBoundsException,这个是因为你没有传入参数的原因,你运行的时候,在命令行下输入java GradeScore "要输入的参数"
例如 java GradeScore 79

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
ArrayIndexOutOfBoundsException: 0
明显是数组角标越界异常,你用的是主函数中的args数组  可是你却没有传入参数,当然报异常了

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
xuchulong1 来自手机 中级黑马 2012-11-7 15:41:23
板凳
你程序是拷贝来的吧,你里边使用了args这个数组,这个数组是main函数传进去的参数,你可以运行的时候把参数传进去,譬如你的程序是test.java,运行的时候在命令窗口输入  java test  95这样就把95这个参数传进去了,另外,函数运行后你也会发现问题,结果大部分应该是不正确的,switch语句要记住需要加break的地方加break,否则会一直往下走的

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
xuchulong1 来自手机 中级黑马 2012-11-7 15:43:06
报纸
哦,上面说错了,用if  else是不会有问题的

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
输入数字的话可以用键盘录入,并用Scanner扫描啊!!
  1. import java.util.Scanner;

  2. public class GradeScore {
  3.     public static void main(String[] args) {
  4.     int score;
  5.     char grade;
  6.     //score=Integer.parseInt(args[0]);
  7.     Scanner sc = new Scanner(System.in);
  8.     while(true)   //可以循环扫描输入内容       
  9.     { score = sc.nextInt();
  10.     if(score==-1) //定义结束标记
  11.     {
  12.             System.exit(0);
  13.             sc.close();
  14.     }
  15.     if(score>=90)
  16.         grade='A';
  17.     else if(score>=80)
  18.         grade='B';
  19.     else if(score>=70)
  20.         grade='C';
  21.     else if(score>=60)
  22.         grade='D';
  23.     else
  24.         grade='F';
  25.     System.out.println("Score="+score+"Grade="+grade);
  26.     }
  27.    
  28.    }
  29.    
  30. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
在命令行中输入 具体的数字,果然就可以了。谢谢大家了。
回复 使用道具 举报
我解释下具体原因吧,你看,你使用的是主方法中的args的这个数组,而在类加载的时候这个静态的主方法也跟着就加载完了,而这时却没有输入任何实际参数,那当然就会报数组角标越界异常了,如果你使用DOS命令行的形式运行程序,就得像二楼那样说的了,在类加载的同时输入实际参数:java GradeScore 97。否则你得换一种接收键盘录入的方式了。
回复 使用道具 举报
没有传入参数
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马