我想确定一个数组的最大标记,其中包含学生的教室名称及其标记。要做到这一点,我有一个像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();
}
}
}
答案 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);
}
}
让我知道任何问题。