问题描述
我有 2 个表,第一个显示学生的姓名,第二个显示学生的分数。每个学生有2个学期。我是这样写的:
import java.util.Scanner;
public class Main
{
public static void main (String args[])
{
Scanner Sc=new Scanner(system.in);
int Number,i,j,q,n;
System.out.println(" how many student in your group ?");
Number=Sc.nextInt();
//create the Array
String [] tab =new String [Number];
for(n=0;n<Number;n++)
{
System.out.println(" Enter studnt name : "+(n + 1) );
tab[n]=Sc.nextLine();
}
int [][] marks=new int [2][Number];
for(j=0;j<Number;j++)
{
for (i=0;i<1;i++)
{
System.out.println(" Enter the marks of the first semster : "+(j + 1));
marks [i][j]=Sc.nextInt();
}
for (q=1;q<2;q++)
{
System.out.println(" Enter the marks of the Second semseter : "+(j + 1));
marks [q][j]=Sc.nextInt();
}
}
}
}
i
= 第一行,显示每个学生第一学期的分数
q
= 第二行,显示每个学生第二学期的成绩
现在我想找到每个学生的总分和最高分。 (一个学生的最高分是指他/她在哪个学期获得最高分,一个学生的总分=第一学期+第二学期)。但是我不知道我会怎么写,如果有人可以帮助我,我会很感激他。
解决方法
我花了一段时间才理解您的数据结构,我建议您使用对象,例如为学生开设课程。该类包含分数、学期等属性,便于数值操作,更易理解。
变量应该是驼峰式的,这意味着它们应该以小写字符开头,例如Number
应该是 number
。
我认为分数更像是分数,如果值越高,分数越好。
获取分数的累计分数:
int totalScore = Stream.of(marks).flatMapToInt(IntStream::of).sum();
sum()
方法返回流中所有值的累积分数。
为了获得一个学期的最高分:
int highestScore = Stream.of(marks[semester]).flatMapToInt(IntStream::of).max().orElseGet(0);
max()
方法返回一个 Optional
。如果流是空的(如果学生在那个学期没有任何分数)它将返回 0,因为 orElseGet(0)
。在所有其他情况下,它返回学期的最高值。
先决条件
在计算每个学生的最高分和总分之前,您需要创建两个数组来存储该数据。数组的大小将是学生的数量。
int[] totalMarks = new int[studentsCount];
int[] highestMark = new int[studentsCount];
逻辑
一旦你有了这些,总分和最高分可以在两个不同的循环或一个循环中计算。
对于任何学生i
,
highestMark[i] = max(marks[0][i],marks[1][i])
totalMarks[i] = marks[0][i] + marks[1][i]
要对所有学生执行相同的过程,请使用从 i = 0
到 studentCount
的简单 for 循环。
改进
您的程序也可以改进。 开始为变量赋予有意义的名称。使用 NUMBER
代替 studentCount
。尽管 Sc
工作正常,但 scanner
更好。另一个改进是:
for(j=0;j<studentCount;j++)
{
System.out.println ("For student " + (j+1) + ": ");
System.out.println("Enter the marks of the first semster: ");
marks [0][j]= scannner.nextInt();
System.out.println("Enter the marks of the second semseter: ");
marks [1][j]= scanner.nextInt();
}
您不需要循环输入任何学生 i
两个学期的分数。
我没有提供任何代码。我已经给出了很多提示,应该可以帮助您自己解决问题。但是,如果您仍然遇到任何问题。发表评论。