我怎样才能找到二维数组中的总分和最高分
how can i find the total and the The highest marks in 2d array
我有两张表,第一张显示学生的姓名,第二张显示学生的分数。每个学生有 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
= 第二行将显示每个学生第二学期的分数
现在我想找出每个学生的总分和最高分。 (一个学生的最高分意味着 he/she 在哪个学期获得最高分,并且一个学生的总分也是总分 = 第一学期 + 第二学期)。但是我不知道怎么写如果有人能帮助我我将不胜感激。
我花了一些时间才理解你的数据结构,我建议使用对象,比如为学生提供 class。这个class有分数、学期等属性,这样操作起来更方便,也更容易理解。
变量应该是驼峰式命名,这意味着它们应该以小写字符开头,例如Number
应该是 number
.
我假设标记更像是点数,如果值越高,标记越好。
获取总分:
int totalScore = Stream.of(marks).flatMapToInt(IntStream::of).sum();
sum()
方法 return 是流中所有值的累积分数。
获得一个学期的最高分:
int highestScore = Stream.of(marks[semester]).flatMapToInt(IntStream::of).max().orElseGet(0);
max()
方法 return 是 Optional
。如果流为空(如果该学生在那个学期没有任何分数)它将 return 0,因为 orElseGet(0)
。在所有其他情况下,它 return 是本学期的最高值。
先决条件
在计算每个学生的最高分和总分之前,您需要创建两个数组来存储该数据。数组的大小将是学生的数量。
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]
要对所有学生执行相同的过程,请使用简单的 for 循环,从 i = 0
到 studentCount
。
改进
你的程序还可以改进。 开始为变量起有意义的名字。使用 studentCount
而不是 NUMBER
。尽管 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
两个学期的分数。
我没有提供任何代码。我已经给出了许多提示,可以帮助您自己解决问题。但是,如果您仍然遇到任何问题。发表评论。
我有两张表,第一张显示学生的姓名,第二张显示学生的分数。每个学生有 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
= 第二行将显示每个学生第二学期的分数
现在我想找出每个学生的总分和最高分。 (一个学生的最高分意味着 he/she 在哪个学期获得最高分,并且一个学生的总分也是总分 = 第一学期 + 第二学期)。但是我不知道怎么写如果有人能帮助我我将不胜感激。
我花了一些时间才理解你的数据结构,我建议使用对象,比如为学生提供 class。这个class有分数、学期等属性,这样操作起来更方便,也更容易理解。
变量应该是驼峰式命名,这意味着它们应该以小写字符开头,例如Number
应该是 number
.
我假设标记更像是点数,如果值越高,标记越好。
获取总分:
int totalScore = Stream.of(marks).flatMapToInt(IntStream::of).sum();
sum()
方法 return 是流中所有值的累积分数。
获得一个学期的最高分:
int highestScore = Stream.of(marks[semester]).flatMapToInt(IntStream::of).max().orElseGet(0);
max()
方法 return 是 Optional
。如果流为空(如果该学生在那个学期没有任何分数)它将 return 0,因为 orElseGet(0)
。在所有其他情况下,它 return 是本学期的最高值。
先决条件
在计算每个学生的最高分和总分之前,您需要创建两个数组来存储该数据。数组的大小将是学生的数量。
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]
要对所有学生执行相同的过程,请使用简单的 for 循环,从 i = 0
到 studentCount
。
改进
你的程序还可以改进。 开始为变量起有意义的名字。使用 studentCount
而不是 NUMBER
。尽管 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
两个学期的分数。
我没有提供任何代码。我已经给出了许多提示,可以帮助您自己解决问题。但是,如果您仍然遇到任何问题。发表评论。