注册 登录
编程论坛 JAVA论坛

一个基础的错误问题,来求助。

Miho 发布于 2016-04-27 10:38, 2547 次点击
最近在自学JAVA,从基础起,但是做一个基础的学生成绩录入划分等级的小程序的时候不知道为什么一直出问题,我贴出来给各位大大看一下。

import java.util.Scanner;
public class scores {
   public static void main(String[] args){
       double[] scores=new double[10];
       Scanner s=new Scanner(System.in);
       //读取键盘输入并且赋值给scores数组元素
       for(int i=1;i<=10;i++){
           System.out.println("请输入第"+i+"位学生的成绩:");
           scores[i]=s.nextDouble();
       }
       for(int j=1;j<=10;j++){
          double temp=scores[j];
          if(temp>=90 && temp<=100){
              System.out.println("第" + j + "位学生成绩的等级是A");
          }
          else if (temp>=80 && temp<=90){
              System.out.println("第" + j + "位学生成绩的等级是B");
          }
          else if (temp>=70 && temp<=80){
              System.out.println("第" + j + "位学生成绩的等级是C");
          }
          else if (temp>=60 && temp<=70){
              System.out.println("第" + j + "位学生成绩的等级是D");
          }
          else{
              System.out.println("第" + j + "位学生成绩的等级是E");
          }
       }
   }
   
}



程序的出错提示是
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
    at test1.scores.main(scores.java:11)

但是我一直没闹懂是哪里溢出了。。。
万分感谢。
6 回复
#2
franksking2016-04-27 15:20
问题出在了数组都是从0开始,d[10]是d[0]到d[9]
#3
林月儿2016-04-27 15:43
程序代码:
for(int j=1;j<=10;j++){
          double temp=scores[j-1];
          if(temp>=90 && temp<=100){
              System.out.println("第" + j + "位学生成绩的等级是A");
          }
          else if (temp>=80 && temp<=90){
              System.out.println("第" + j + "位学生成绩的等级是B");
          }
          else if (temp>=70 && temp<=80){
              System.out.println("第" + j + "位学生成绩的等级是C");
          }
          else if (temp>=60 && temp<=70){
              System.out.println("第" + j + "位学生成绩的等级是D");
          }
          else{
              System.out.println("第" + j + "位学生成绩的等级是E");
          }
       }
#4
virous2016-04-28 10:43
回复 楼主 Miho
数组下标是从0开始:
for(int i=0;i<10;i++){
           System.out.println("请输入第"+i+"位学生的成绩:");
           scores[i]=s.nextDouble();

这样修改后,遍历从0-9就OK了!
#5
mary_xiaoman2016-04-29 10:53

抛出的异常为:数组下标越界,就是你访问的元素索引大于数组个数,数组下标是从0开始,double[] scores=new double[10]; scores[0]-scores[9],而你的程序出现了scores[10]

解决方法:

其它代码不用动,只需要在这两个地方改一下,这样你打印的信息也不会受影响:

scores[i-1]=s.nextDouble();

double temp=scores[j-1];


#6
Miho2016-04-29 13:52
回复 4楼 virous
了解了,谢谢,看来对数组还不够了解
#7
Miho2016-04-29 13:52
回复 5楼 mary_xiaoman
了解了,谢谢!
1