我正在开发一个Java项目,该项目请求用户输入信息,如名称,ID,数组中的得分。我需要帮助计算用户输入的平均成绩以及如何找出得分最高的人。这是我的代码:
package finalproject;
import java.util.Scanner;
/**
*
* @author vincephng
*/
public class FinalProject {
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
Scanner input= new Scanner(System.in);
Cis84[] student= new Cis84[50];
int option;
for (int c = 0; c<50;c++)
student[c]=new Cis84();
do{
System.out.print("");
System.out.println("1) Add Information");
System.out.println("2) Show report");
System.out.println("3) Exit");
System.out.print("\nEnter option: ");
option = input.nextInt();
switch(option)
{
case 1:
String n;
double g;
int index, i;
System.out.println("Which position of the student?");
index=input.nextInt();
System.out.println("What is the student's name:");
n=input.nextLine();
n=input.nextLine();
System.out.println("What is student's Id");
i=input.nextInt();
System.out.println("What is student's score");
g=input.nextDouble();
student[index].setName(n);
student[index].setGrade(g);
student[index].setId(i);
break;
case 2:
for(int c=0; c<50;c++)
System.out.println(student[c]);
break;
case 3:
System.out.println("You are done");
break;
default:
System.out.println("Try again");
break;
}
}while (option != 3);
}
}
和班级
package finalproject;
public class Cis84
{
private String name;
private int id;
private double grade;
public Cis84()
{
name="not input yet";
id= 00000;
grade= 0.0;
}
public Cis84(String n, int i, double g)
{
name= n;
id= i;
grade=g;
}
public void setName(String n)
{
name=n;
}
public void setId(int i)
{
id=i;
}
public void setGrade(double g)
{
grade=g;
}
public String getName()
{
return name;
}
public int getId()
{
return id;
}
public double getGrade()
{
return grade;
}
public String toString()
{
return String.format("%s\n%d\n%.2f\n", name, id, grade);
}
}
答案 0 :(得分:1)
你的toString方法没有被正确定义 - 它应该是toString
,小写t,而不是你现在拥有的ToString
。顺便说一句,这是为什么建议在覆盖超类时使用@Override
注释&#39;方法。如果你犯了一个微不足道的错误(例如拼写错误,或像你在这里混淆的情况),编译器会提醒你你做错了什么,而不是仅仅允许你声明另一种方法,它本身没有任何问题,除了不是你想要覆盖的方法。
总结一下,以下是代码的外观:
@Override // override annotation
public String toString() { // correct method name
return String.format("%s\n%d\n%.2f\n", name, id, grade);
}
答案 1 :(得分:1)
您的错误在这里:
你写了这个:
public String ToString() {
return String.format("%s\n%d\n%.2f\n", name, id, grade);
}
那不是类对象的toString()方法..(注意名称的区别,java定义方法camelCase但是你做了PascalCase)
你的意思是
@Override
public String toString() {
return String.format("%s\n%d\n%.2f\n", name, id, grade);
}
之后,您将能够看到student[c]
答案 2 :(得分:0)
您应该覆盖Cis84
课程的for(Cis84 std: student){
System.out.println(std);
}
方法。然后,您可以使用以下方法之一:
Arrays.deepToString(student);
或
OneClass
答案 3 :(得分:0)
取代
case 2:
for(int c=0; c<50;c++)
System.out.println(student[c]);
break;
试试这个:
case 2:
for(int c=0; c<50;c++)
System.out.println(student[c].getName()+" "+student[c].getId()+" "+student[c].getGrade());
break;
您正在打印对象,但实际上您需要该对象内的数据。