Java使用HashMap userinput循环

时间:2015-05-07 01:04:02

标签: java hashmap

我看到了一个学生注册示例,并希望以我自己的方式使用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。

任何指示/建议都会有所帮助。感谢您宝贵的时间和意见。

2 个答案:

答案 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;

        }
    }

.....将用户输入移动到addNameGetInfo

中的单独程序
 ....
 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());