2015-12-15 59 views
1

我被要求写一门课,要求用户输入一些学生的成绩。 然后,打印得到最高分的学生的名字。 我可以用主要方法做到,但我被要求写一个比较成绩的课。然后,它返回获得最高分数的学生的姓名。然后调用主要方法中比较等级的方法并打印学生姓名。如何在比较成绩后打印学生姓名

我写的整个程序,但我坚持用比较级

public static String MaxGrade (int Grade[]){ 
    String[] StuName = new String [stuCount] ; 
    int Max = Grade[0] ; 
    String Name = StuName[0]; 

    for (int i=0; i<stuCount; i++){ 
     if(Grade[i] > Max){ 
      Name = StuName[i] ; 
     } 
    } 
    return Name ; 
} 

当我把它在它的程序没有错误执行的主要方法。但它显示空比较过程

String NameOfMaxGrade = MaxGrade(Grade) ; 
System.out.println ("\nThe student who got the maximum grade is : " + NameOfMaxGrade) ; 

后,我写了一个类Student()其特性和构造以及所有我的程序需要工作的方法。我只希望有人帮助我如何显示获得最高分数的学生的姓名。

最好的问候,

+0

您需要养成让变量以小写字母开头的习惯。例如:'stuName'而不是'StuName'。 –

回答

1

即使您在主要方法中收集了名称,该方法仍然会初始化一个新的学生数组,无论如何,不​​使用收集的名称。因此,要解决这个问题,你应该摆脱线

String[] StuName = new String [stuCount]; 

,并把一个StudentName实例变量(可以是例如一个字符串数组)的类。这个实例变量应该在构造函数的某个地方初始化,并且在类中的任何方法之外声明。因为MaxGrade方法现在被写入,所以它只会返回null,因为StuName数组永远不会被赋予任何值。

public class Student{ 
     private String[] StuName; 
     public Student{ 
       //initialize StuName 
       //rest of constructor 
     } 
     //rest of class 
} 

就可以解决这个问题的另一种方式是通过添加另一个参数的方法,这样的方法签名变得

public static String MaxGrade (int Grade[], String StuName[]) 

,使主,你可以输入学生的预定阵列方法调用中的名称。

+0

谢谢,我喜欢第二个解决方案。这解决了我的问题 – JavaBiggener

+0

尽管第二种解决方案是合适的,但我想指出,应该在可能包含Student对象数组的Class类的上下文中考虑第一个解决方案。在一个学生类中,StuName数组看起来有点奇怪。 –

2

在你MaxGrade方法,创建学生姓名的数组,但你永远不与学生的实际名称来填充。

String[] StuName = new String [stuCount] ; 

您需要添加从用户收集名称并将其插入到数组中的代码。

+0

我已经在主要方法 – JavaBiggener

+0

中收集用户的姓名然后请向我们显示该代码,因为除非我们能够看到您所做的工作,否则我们无法帮助您。 – Jason

+0

检查我的程序 – JavaBiggener