JAVA 数组问题 萌新求助

WaterInTheDream 2017-12-17 10:15:07
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Assingment3 {
public static void main(String[] args) {
System.out.println("how many course do your students have?");
Scanner cs = new Scanner(System.in);
int CN = cs.nextInt();
List<String> ID = new ArrayList<>();//对学生的ID创建一个动态数组
int SN = 1;//学生数量初始值
double[] tm;//输出每个学生总成绩
double[] am;//每个学生平均分
String[] mk;//每个学生等级
String ii;
double[][] MARK;//每个学生的每门课成绩
int v=0;
do {
double TM = 0;
double AM = 0;
double[][] mark = new double[SN][CN];
double[] Tm = new double[SN];
double[] Am = new double[SN];
String[] MK = new String[SN];
System.out.println("What's the ID of # " + SN + "student: ");
Scanner id = new Scanner(System.in);
String id1 = id.next();
ID.add(id1);
for (int b = 1; b <= CN; b++) {
System.out.println("What the mark of course " + b);
Scanner Mark1 = new Scanner(System.in);
int m1 = Mark1.nextInt();
mark[SN - 1][b - 1] = m1;
TM = TM + m1;
AM = TM / CN;
}
Tm[SN - 1] = TM;
Am[SN - 1] = AM;
if (AM <= 100 && AM >= 86)
v = 1;
else if (AM >= 75 && AM < 86)
v = 2;
else if (AM >= 60 && AM < 75)
v = 3;
else if (AM >= 56 && AM < 60)
v = 4;
else if (AM >= 0 && AM < 56)
v = 5;
else
System.out.println("Wrong input");
switch (v) {
case 1:
MK[SN - 1] = "A";
break;
case 2:
MK[SN - 1] = "B";
break;
case 3:
MK[SN - 1] = "C";
break;
case 4:
MK[SN - 1] = "D";
break;
case 5:
MK[SN - 1] = "F";
break;
default:
MK[SN - 1] = "Wrong input";
}
tm = Tm;
am = Am;
mk = MK;
MARK = mark;
System.out.println("Do you want to continue?(Type Y for yes, N for no)");
Scanner i = new Scanner(System.in);
ii = i.next().toLowerCase();
SN++;
} while (ii.equals("y"));
System.out.print("Student ID | Course: ");
for (int i = 1; i <= CN; i++)
System.out.print(i + " ");
System.out.println(" | Total | Average | Grade");
for (int c = 0; c < SN; c++) {
System.out.print(ID.get(c));
for (int j = 0; j < CN; j++) {
System.out.print(" "+ (MARK[c][j]));
}
System.out.println(" " + tm[c] + " " + am[c] + " " + mk[c]);
}
}
}

输出后提示错误:



请大佬们帮我看看哪里错了需要如何改正谢谢!!!
...全文
988 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
galiniur0u 2018-01-15
  • 打赏
  • 举报
回复
楼主在每次输入之后,都将Mark=mark,导致每次都只记录了最新的数据内容,所以第一行的值都是空的,如果楼主输入3行,那么前两行都是空的,只有最后一行。楼主只是练习java中的各个语法么?如果是你已经达到了。
oyljerry 2018-01-12
  • 打赏
  • 举报
回复
for (int b = 0; b <= CN-1; b++) 你赋值的地方也要从0开始。所有的for循环都是0开始
qq_36585995 2018-01-12
  • 打赏
  • 举报
回复
数组越界了,就是数组的下标超过了数组的长度,仔细检查下边界就行了
WaterInTheDream 2017-12-17
  • 打赏
  • 举报
回复
引用 1楼Tian_zhishang 的回复:
索引从0开始,你是从一开始的,换成i<CN即可
但是i控制的不是输出中第一行中的课程代号么?
天之上有什么 2017-12-17
  • 打赏
  • 举报
回复
索引从0开始,你是从一开始的,换成i<CN即可
WaterInTheDream 2017-12-17
  • 打赏
  • 举报
回复
引用 3楼hmx681130 的回复:
for (int c = 0; c < SN-1; c++)  SN比ID长度多1
但是第一个ID下的所有值还是为空诶
hmx681130 2017-12-17
  • 打赏
  • 举报
回复
for (int c = 0; c < SN-1; c++)  SN比ID长度多1

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧