java输入若干学生姓名和成绩并计算平均分

目的是①,输入学生姓名,依次输入5门课成绩,输出平均分,并给出提示是否继续输入。②,如果输入字母y,则重复①的步骤,始终循环;如果输入字母n,则输出成绩录入结束,循环终止。
我是新手,被这个题目搞晕了,虚心求指教。题目要求是用(while,do-while,for循环,多重循环)。
下面是我的代码和eclipse的运行结果:
import java.util.Scanner;
public class Test{
public static void main(String[] args){
String name;
Scanner input=new Scanner(System.in);
System.out.print("输入学生姓名:");
name=input.next();

int[] result=new int[5];
int i=0;//设角标数为i。

Scanner fenshu=new Scanner(System.in);
String j;
do{
do{
System.out.print("请输入5门功课中第"+(i+1)+"门课的成绩:");
result[i]=fenshu.nextInt();
i++;
}while(i<result.length);

double average=(result[0]+result[1]+result[2]+result[3]+result[4])/result.length;
System.out.print(name+"的平均分是:"+average);
System.out.println("\n"+"继续输入吗(y/n)?");
j = input.next ();
}while(j.equals("y"));
System.out.println("成绩录入结束");
}
}
---------------------------------------------------------------------------------------------------------------------------------

输入学生姓名:Test
请输入5门功课中第1门课的成绩:90
请输入5门功课中第2门课的成绩:90
请输入5门功课中第3门课的成绩:90
请输入5门功课中第4门课的成绩:90
请输入5门功课中第5门课的成绩:88
Test的平均分是:89.0
继续输入吗(y/n)?
y
请输入5门功课中第6门课的成绩:90
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at Test.main(Test.java:17)

------------------------------------------------------------------------------------------------------------------

import java.util.Scanner;

/**
 * 输入数据存入数组
 * 
 * @author Administrator
 *
 */
public class ScannerInput {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int sum = 0, avg = 0;
String str = "";
do {
System.out.print("请输入学生的人数:");
int renshu = in.nextInt();// 存储学生的人数
System.out.print("请输入课程的数目:");
int courseNum = in.nextInt();// 存储课程的数目
String[] name = new String[renshu];// 声明一个String数组用来存储学生的姓名
String[] course = new String[courseNum];// 声明一个String数组用来存储课程的名称
int[][] number = new int[renshu][courseNum];

/*
 * 用来循环的存储课程的名称
 */
for (int i = 0; i < course.length; i++) {
System.out.print("请定义第" + (i + 1) + "门课程的名字:");
course[i] = in.next();
}
/*
 * 用来录入学生的各科成绩
 */
for (int i = 0; i < renshu; i++) {
System.out.print("请输入学生的姓名:");
name[i] = in.next();
for (int j = 0; j < courseNum; j++) {
System.out.print("请输入学生" + name[i] + "的" + course[j]
+ "成绩:");
number[i][j] = in.nextInt();
sum += number[i][j];
}
System.out.println("学生" + name[i] + "的平均分为:"
+ (sum * 1.0 / courseNum));
}

System.out.print("是否继续输入?(y/n):");
str = in.next();
} while (str.equals("y"));
}
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-04-11
}while(j.equals("y"));

改成
}while(!j.equals("y"));

就是多一个感叹号,表示非追问

不对哦。我的代码整体思路我都感觉是错的。
我输入y是继续了,但是不是重新输入名字+成绩(直接输入的成绩,而且是第6门,不是第1门),接着就报错了。
还有,这种数组的平均数我都不会,看上面计算的平均数都是错的。

第2个回答  2015-04-11
数组角标越界,如果你输入字母y时,就继续输入成绩,但是 i 没有重置为0,就会越界
相似回答