import java.util.Scanner;
class DataInput {
String name[];
int korean[], math[], english[];
int sum[];
double average[];
static int rank[];
int students;
public void save() {
Scanner sc = new Scanner(System.in);
System.out.println("Please input number of students");
students = sc.nextInt();
name = new String[students];
korean = new int[students];
math = new int[students];
english = new int[students];
sum = new int[students];
average = new double[students];
rank = new int[students];
for (int i = 0; i < students; i++) {
System.out.println("Name?");
name[i] = sc.next();
System.out.println("Korean Score :");
korean[i] = sc.nextInt();
System.out.println("Math Score :");
math[i] = sc.nextInt();
System.out.println("English Score :");
english[i] = sc.nextInt();
sum[i] = korean[i] + math[i] + english[i];
average[i] = sum[i] / 3;
}
}
}
class DataOutput extends DataInput {
public void ranker() {
for (int i = 0; i < students; i++){
rank[i] = 1;
}
for (int i = 0; i < students; i++) {
for (int j = i + 1; j < students; j++) {
if (sum[i] < sum[j]) {
rank[i] += 1;
} else if(sum[i]>sum[j]){
rank[j] += 1;
}
}
}
}
}
public class Score {
public static void main(String[] args) {
DataInput data = new DataInput();
DataOutput out = new DataOutput();
data.save();
out.ranker();
System.out.println();
System.out.println("Name\t\tKorean Math English\tSum Average Rank");
System.out
.println("-------------------------------------------------------");
for (int i = 0; i < data.students; i++) {
System.out
.println(data.name[i] + "\t\t" + data.korean[i] + " "
+ data.math[i] + " " + data.english[i] + "\t"
+ data.sum[i] + " " + data.average[i] + " "
+ out.rank[i]);
}
}
}
所以,这是我建立的一个小程序。我认为逻辑是正确的,但是当我运行程序并输入所有变量时,学生的等级都是0。
我无法弄清楚问题是什么。如果有人帮助我,真的很感激。
答案 0 :(得分:3)
而不是average[i] = sum[i] / 3;
- 这是整数数学;我认为你真的需要average[i] = sum[i] / 3.0;
,它应该给你一个非零结果。
答案 1 :(得分:1)
当您调用实例化数据输出的新实例
时 DataOutput out = new DataOutput();
它会创建所有新数据。将学生人数设为零。
不推荐
你应该传递学生编辑和其他数据的数量
DataOutput out = new DataOutput(students, otherData);
//In Class Constructor
DataOutput(int student, int ... otherData)
{
this.student = student;
for(int i : otherData)
//code
}
<强>推荐强>
或者你应该将ranker方法放在dataInput类
中 class DataInput
{
//code
public int ranker()
{
//code
}
}
答案 2 :(得分:0)
data
变量和out
变量“未链接”。你在“空”课上打电话给ranker
。仅仅因为DataOutput extends DataInput
并不意味着这两个实例无论如何都是链接/相关的。
在给定代码的上下文中:将ranker
方法移动到DataInput
类中,只省略DataOutput
类。然后在ranker()
变量上调用data
。
答案 3 :(得分:0)
使用相同的派生类对象仅在一个对象上保存数据。您正在创建两个对象。 使用DataInput对象,可以存储数据。为DataOutput创建对象时,它是新对象,所有数组中的所有默认值都为“0”。因此,使用派生类对象进行数据存储和输出。
out.save();
out.ranker();
System.out.println();
System.out.println("Name\t\tKorean Math English\tSum Average Rank");
System.out
.println("-------------------------------------------------------");
for (int i = 0; i < out.students; i++) {
System.out
.println(out.name[i] + "\t\t" + out.korean[i] + " "
+ out.math[i] + " " + out.english[i] + "\t"
+ out.sum[i] + " " + out.average[i] + " "
+ out.rank[i]);
}