我怎样才能找到二维数组中的总分和最高分

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 = 0studentCount


改进

你的程序还可以改进。 开始为变量起有意义的名字。使用 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 两个学期的分数。


我没有提供任何代码。我已经给出了许多提示,可以帮助您自己解决问题。但是,如果您仍然遇到任何问题。发表评论。