请帮助我从这个超类继承

时间:2014-05-16 04:12:41

标签: java inheritance hashmap superclass

我想确定一个数组的最大标记,其中包含学生的教室名称及其标记。要做到这一点,我有一个像Person这样的超类,它包含getName()Max()print()抽象方法,不应该被更改。

我有一个名为Student的子类,它应该从Person超类扩展。该子类应保存学生的信息并获得教室的最大标记,然后打印出来。主类名称为Points。我使用了一个hashmap来将标记存储在其值中。如何在Max()方法中使用此值以及如何使用Print()方法显示最大标记和学生姓名。感谢。

这是我写的。

Person超类:

public abstract class Person {
private String name;

Person(String name) {
    this.name = name;
}

public String getName() {
    return name;
}

public abstract void Max();

public abstract void Print();

}

Student子类:

import java.util.*;

public class Student extends Person {
Map<String, Integer> scores = new HashMap<>();

Student(String name) {
    super(name);
    String[] bits = name.trim().split(" ");
    for (int i = 0; i < bits.length; i++) {
        int Marks = Integer.parseInt(bits[1]);
        scores.put(bits[0], Marks);
    }
}

@Override
public void Max() {

}

@Override
public void Print() {

}

}

Points主要课程:

public class Points {

public static void main(String[] args) {

    String[] Marks = new String[] { "Student1 12",
            "Student2 90",
            "Student3 45",
            "Student4 76", 
            "Student5 58", };
    for (int i = 0; i < Marks.length; i++) {
        Student std = new Student(Marks[i]);
        std.getName();
        std.Max();
        std.Print();
    }
}

}

2 个答案:

答案 0 :(得分:0)

通过继承的概念,你在这里说的是:

每个Student都是Person。这没关系。

但是,每个Person,只能访问自己的数据,而不能访问其他人的数据。数据,包括姓名,得分和数据......它只能访问自己的数据。

在您的Points主要课程的定义中,您使用学生的信息填充了数组标记,因此Points课程可以访问所有学生。因此,它理想的是在维护所有对象的类中实现处理多个对象的方法。

这里有两个提示:

  • 你真的不需要HashMap课程Student。每个Student只会存储自己的姓名和分数,而不是所有学生的姓名和分数。姓名和分数。只要您想存储多个相同类型但具有不同指标的值,就会使用HashMap,因此您可以轻松找到一个值。

  • 尽量让main方法尽可能短。例如,您可以使用Program方法创建一个类run(),并仅在Program方法中实例化该run()类并调用其main方法。

答案 1 :(得分:0)

更改Point类,如下所示,调用max,在外面打印方法for循环。

为max和print方法编写逻辑。 inside max method直接使用hashmap来检索最大值。

您也为您创建的每个对象创建了hashmap,因此对于每个名称,它将创建新的hashmap,因此您将始终从max方法获得姓氏。

所以在下面的学生类中将hashmap设为静态

static Map<String, Integer> scores = new HashMap<>();

请参阅下面的整个代码

Person.java

package com.kb.studentMaxMarks;

import java.util.Map.Entry;

public abstract class Person {
private String name;

public Person() {
    // TODO Auto-generated constructor stub
}
Person(String name) {
    this.name = name;
}

public String getName() {
    return name;
}

public abstract Entry<String, Integer> Max();

public abstract void Print(Entry<String, Integer> entry);

}

Student.java

package com.kb.studentMaxMarks;

import java.util.*;
import java.util.Map.Entry;

public class Student extends Person {
static Map<String, Integer> scores = new HashMap<>();

Student(String name) {
    super(name);
    String[] bits = name.trim().split(" ");
    for (int i = 0; i < bits.length; i++) {
        int marks = Integer.parseInt(bits[1]);
       // System.out.println(marks);
        scores.put(bits[0], marks);
    }
}

@Override
public Entry<String, Integer> Max() {
    System.out.println("inside max");

     Map.Entry<String,Integer> maxEntry = null;
     //System.out.println(" max value of map "+maxValueInMap);
    for (Map.Entry<String,Integer> entry : scores.entrySet()) {
         if (maxEntry == null || entry.getValue().compareTo(maxEntry.getValue()) > 0)
            {
                maxEntry = entry;
            }
    }
    //System.out.println(maxEntry.getValue());
    return maxEntry;

}

@Override
public void Print(Entry<String, Integer> entry) {
    System.out.println("name "+entry.getKey()+" score "+entry.getValue());

}

}

Points.java

package com.kb.studentMaxMarks;

import java.util.Map.Entry;

public class Points {

public static void main(String[] args) {
    String[] Marks = new String[] { "Student1 12",
            "Student2 90",
            "Student3 45",
            "Student4 76", 
            "Student5 58", };
    Student std = null;
    for (int i = 0; i < Marks.length; i++) {
         std = new Student(Marks[i]);
        std.getName();
    }
    Entry<String, Integer> entry = std.Max();
    std.Print(entry);
}

}

让我知道任何问题。