我看到了一个学生注册示例,并希望以我自己的方式使用HashMap
来编写它,以了解有关HashMap
的更多信息。
关于该计划: 1)您可以添加学生姓名和学生ID - 班级学生
import java.util.*;
public class Student {
Scanner userInput = new Scanner(System.in);
public String sName(){
System.out.print("Enter student name: ");
String sName = userInput.next();
return sName;
}
public char sID(){
System.out.print("Enter student ID: ");
char sID= userInput.next().charAt(0);
return sID;
}
}
2)我已经声明了2个HashMap变量的类,一个用于学生姓名和id,第二个用于GPA和id -class AddInfo
import java.util.*;
public class AddInfo {
public HashMap<String,Character> studentInfo= new HashMap<String,Character>();
public HashMap<Double,Character> studentGPAInfo= new HashMap<Double,Character>();
}
3)您可以添加学生GPA和学生ID - 班级StudentGPA
import java.util.*;
public class StudentGPA {
Scanner userInput = new Scanner(System.in);
public double sGPA(){
System.out.print("Enter student GPA: ");
double sGPA = userInput.nextDouble();
return sGPA;
}
public char sID(){
System.out.print("Enter student ID: ");
char sID= userInput.next().charAt(0);
return sID;
}
}
4)最后一个使用.put - 类GetInfo
来利用上述类中的所有信息import java.util.*;
public class GetInfo {
public HashMap<String,Double> myStudent=new HashMap<String,Double>();
public void addName(){
Student s= new Student();
StudentGPA sG= new StudentGPA();
AddInfo ai= new AddInfo();
ai.studentInfo.put(s.sName(), s.sID());
ai.studentGPAInfo.put(sG.sGPA(),sG.sID());
if(s.sID()== sG.sID()){
myStudent.put(s.sName(), sG.sGPA());
System.out.println("For student id "+ s.sID()+ "you have " + myStudent);
}
}
}
5)主要课程
public class Main {
public static void main (String []args){
GetInfo g= new GetInfo();
g.addName();
}
}
我的问题:我认为我的问题是在第4点(GetInfo类),我试图评估2个学生ID是否相同。如果它们相同,则将它们放在不同的HashMap
变量中。
if(s.sID()== sG.sID())
当我执行程序时,它会继续询问输入学生ID。
任何指示/建议都会有所帮助。感谢您宝贵的时间和意见。
答案 0 :(得分:2)
每次你做
if(s.sID()== sG.sID())
您正在调用类sID()
的{{1}}方法,其内容为:
StudentGPA
因此,当然会提示您输入。
您应该编写一个public char sID(){
System.out.print("Enter student ID: ");
char sID= userInput.next().charAt(0);
return sID;
}
来设置实例变量中的值,然后编写setSid()
方法,只返回getSid()
值而不提示输入。
然后你if语句将如下所示:
sID
答案 1 :(得分:1)
你必须有一次初始值,然后使用getter获取值
public class StudentGPA {
private double sGPA;
private char sID;
Scanner userInput = new Scanner(System.in);
public void initSGPA(){
System.out.print("Enter student GPA: ");
sGPA = userInput.nextDouble();
}
public void initsID(){
System.out.print("Enter student ID: ");
sID= userInput.next().charAt(0);
}
public double getSGPA()
{
return sGPA;
}
public char getSID()
{
return sID;
}
}
在我看来,更好的方法是使用bean
public class StudentGPA {
private double sGPA;
private char sID;
Scanner userInput = new Scanner(System.in);
public void setSGPA(double sGPA){
this.sGPA = sGPA;
}
public void setSID(char sID){
this.sID= sID;
}
public double getSGPA()
{
return sGPA;
}
public char getSID()
{
return sID;
}
}
.....将用户输入移动到addName
或GetInfo
类
....
System.out.print("Enter student GPA: ");
sG.setSGPA(userInput.nextDouble());
System.out.print("Enter student ID: ");
sG.setSID(userInput.next().charAt(0));
.....
AddInfo ai= new AddInfo();
ai.studentInfo.put(s.getSName(), s.getSID());
ai.studentGPAInfo.put(sG.getSGPA(),sG.getSID());