微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我有 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 = 0studentCount 的简单 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 两个学期的分数。


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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。