【问题标题】:How to find the Maximum and Minimum value of a Row and a Column Separately in a 2D Array in Java? [closed]如何在Java中的二维数组中分别找到行和列的最大值和最小值? [关闭]
【发布时间】:2013-01-26 05:38:25
【问题描述】:

如何找到:

  1. Java 中二维数组的行中的最大值。
  2. Java 中二维数组的行中的最小值。
  3. Java 中二维数组的列中的最大值。
  4. Java 中二维数组的列中的最小值。

import java.util.*;
class Example{
    public static void main(String args[]){
        Scanner input=new Scanner(System.in);
        System.out.print("Enter Number of Students : ");
        byte a=input.nextByte();
        System.out.print("Enter Number of Subjects : ");
        byte b=input.nextByte();
        System.out.println();

        byte[][] st=new byte[a][b];

        //Input Marks for Subjects for different Students
        for(byte i=0;i<a;i++){
            System.out.println("Enter Subject Marks for Student "+(i+1)+" :- ");
            for(byte x=0;x<b;x++){
                System.out.print("\tEnter Marks % for Subject "+(x+1)+" : ");
                st[i][x]=input.nextByte();
            }
            System.out.println();
        }

        //Find Student Total
        int[] studTotal=new int[a];
        for(byte i=0;i<a;i++){
            for(byte x=0;x<b;x++){
                studTotal[i]=studTotal[i]+st[i][x];
            }
        }

        //Find Student Average
        float[] studAvg=new float[a];
        for(byte i=0;i<a;i++){
            for(byte x=0;x<b;x++){
                studAvg[i]=(float)studTotal[i]/b;
                studAvg[i]=Math.round(studAvg[i]*100)/(float)100;
            }
        }

        //Find Student Grade
        char[] studGrade=new char[a];
        for(byte i=0;i<a;i++){
            if(studAvg[i]>=75){
                studGrade[i]='A';
            }else if(studAvg[i]>=65){
                studGrade[i]='B';
            }else if(studAvg[i]>=55){
                studGrade[i]='C';
            }else if(studAvg[i]>=35){
                studGrade[i]='D';
            }else{
                studGrade[i]='F';
            }
        }

        //Find Student Maximum
        byte[] studMax=new byte[a];
        for(byte i=0;i<a;i++){
        studMax[i]=st[i][0];//<<==Problem-Solved==>>
            for(byte x=0;x<b;x++){
                if(st[i][x]>studMax[i]){
                    studMax[i]=st[i][x];
                }
            }
        }

        //Find Student Minimum
        byte[] studMin=new byte[a];
        for(byte i=0;i<a;i++){
        studMin[i]=st[i][0];//<<==Problem-Solved==>>
            for(byte x=0;x<b;x++){
                if(st[i][x]<studMin[i]){
                    studMin[i]=st[i][x];
                }
            }
        }

        //Display Information in a Table
        for(byte i=0;i<a;i++){
            for(byte x=0;x<b;x++){
                System.out.print(st[i][x]+"\t");
            }
            //Display Student's Total, Average, Grade, Maximum, Minimum
            System.out.print(studTotal[i]);
            System.out.print("\t"+studAvg[i]);
            System.out.print("\t"+studGrade[i]);
            System.out.print("\t"+studMax[i]);
            System.out.print("\t"+studMin[i]);
            System.out.println();
        }

    }
}

【问题讨论】:

  • 听起来你要求我们做你的功课。您能否详细说明您尝试了什么,以及您遇到了什么具体问题。查找最大值/最小值听起来就像迭代并将中间最大值/最小值存储给我一样简单
  • 努力说明您在执行此操作时遇到的问题
  • 请@gerrytan & sansix 帮我解决我的麻烦,这是一个卑微的请求,请大家帮忙,

标签: java arrays 2d max min


【解决方案1】:

因为这听起来很像家庭作业,所以我不会详细说明,但我会这样做:

  1. 我会有数组,一个用于最大值,一个用于每一行和每列的最小值。
  2. 用非常大的正数初始化要存储最小值的数组,用非常大的负数初始化要存储最大值的数组。
  3. 我将遍历我拥有的所有行,并将这些数组中的值设置为每行的最大值和最小值。这可以使用嵌套循环轻松完成。 Math.max(double a, double b)Math.min(double a, double b) 应该会派上用场。

编辑:根据您的评论,经过仔细检查,您似乎在整个应用程序中都使用了byte。对于此类问题,这不是合适的数据类型。我建议使用double 并更改从用户获取数据的方式,使用nextDouble() 而不是nextByte()

【讨论】:

  • 我不知道那些 utils 和 swings,cn。你请告诉我怎么做参考。以上代码,请,请,我将非常感谢你,
  • @user2060289:请看我的编辑。
  • 请告诉我你是那个?,我在内存分配方面考虑很多,那是我使用字节,
  • @user2060289:我认为对于这种情况,您不必担心内存消耗,程序似乎相当简单,使用byte 可能不会使其具有可读性。此外,使用doublefloat 数据结构将使您的程序更接近现实生活场景。根据hereByte 保持从 -128 到 127。如果在使用 SAT 分数的情况下使用您的程序将无法工作,我相信它的最大值远大于 127
  • 谢谢,我找到了方法。它
【解决方案2】:
public static void main(String[] args) {
    int[][] matrix = { { 2, 1, 4, 5 }, { 3, 9, 8, 43 } };

    for (int i = 0; i < matrix.length; i++) {
        int minInRow = matrix[i][0];
        int maxInRow = matrix[i][0];
        for (int j = 0; j < matrix[i].length; j++) {
            if (minInRow > matrix[i][j]) {
                minInRow = matrix[i][j];
            }

            if (maxInRow < matrix[i][j]) {
                maxInRow = matrix[i][j];
            }
        }
        System.out.println("Maximum in row is" + maxInRow);
        System.out.println("Minimum in row is " + minInRow);
        minInRow = matrix[i][0];
        maxInRow = matrix[i][0];
    }

}

上面的代码只会从给定的二维数组中找到最小值和最大值。尝试自己为列编写类似的代码。

【讨论】:

  • tnx,4 回复,让我试试这个,反正 tnx 非常多。
  • tnx,我试过了,bt,我在应用我的代码时遇到了麻烦,如果你能在这方面帮助我,将进一步感谢你,plz
  • tnx 非常多,问题解决了,tnx,不像其他人,你帮助,无论如何谢谢你,我会尝试找出如何连续找到最大值和最小值并发布它,tnx跨度>
猜你喜欢
  • 2018-09-14
  • 1970-01-01
  • 1970-01-01
  • 2015-02-01
  • 1970-01-01
  • 2017-03-16
  • 2019-03-31
  • 2017-02-13
  • 2019-12-09
相关资源
最近更新 更多