gpt4 book ai didi

java - 显示存储在 HashMap 中的对象值

转载 作者:行者123 更新时间:2023-12-01 21:11:04 25 4
gpt4 key购买 nike

我有一个 HashMap,其中存储了一个字符串(键)和一个学生对象(值)。我希望迭代哈希并显示每个键/值对。但是,我想显示键,后跟存储在 Student 对象中的字符串名称值。我尝试了多种方法,但每种方法都在某种程度上让我失败了。我相信我并不完全理解“static”修饰符,也不完全理解如何使用 HashMap。

这是我的完整程序:

import java.io.*;
import java.util.Scanner;
import java.util.HashMap;
import java.util.Iterator;
public class FinalProgram {
public static void main(String[] args) throws IOException {
nameReader();
}

private static void nameReader() throws IOException {
String nameFile = " ";
String next = " ";
int sNumber = 0;
String formatSNumber = " ";
String sName = " ";
Scanner input = new Scanner(System.in);
HashMap<String, Student> map = new HashMap<>();

try {
System.out.print("Enter the Name file(c:filename.txt): ");
nameFile = input.nextLine();
} catch(IllegalArgumentException e) {
System.out.printf("Invalid input. Please enter"
+ " filename in the form of "
+ "c:filename.txt\n", e.getMessage());
}
//Instantiate FileReader and BufferedReader
FileReader freader = new FileReader(nameFile);
BufferedReader Breader = new BufferedReader(freader);
boolean end = Breader.ready();

do {
next = Breader.readLine();
sNumber = Integer.parseInt(next);
formatSNumber = String.format("%03d", sNumber);
sName = Breader.readLine();
Student student = new Student(sName);
map.put(formatSNumber, student);
end = Breader.ready();
} while(end);
Iterator<String> keySetIterator = map.keySet().iterator();
while(keySetIterator.hasNext()) {
String key = keySetIterator.next();
System.out.println("key: " + key + " value: " + map.get(Student.getName()));
}
}

这是我读取名称文件的算法:

//Declaration of HashMap
HashMap<String, Student> map = new HashMap<>();

do {
next = Breader.readLine();
sNumber = Integer.parseInt(next);
formatSNumber = String.format("%03d", sNumber);
sName = Breader.readLine();
Student student = new Student(sName);
map.put(formatSNumber, student);
end = Breader.ready();
} while(end);
Iterator<String> keySetIterator = map.keySet().iterator();
while(keySetIterator.hasNext()) {
String key = keySetIterator.next();
System.out.println("key: " + key + " value: " + map.get(key));
}

这是我的学生类(class)(我已经完成了 getters 和 setts 并创建了一个构造函数,因为我遇到了问题,接下来我将解释这些问题:

public class Student {
private String name = " ";
public Student(String name) {
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
Course course = new Course();
}

现在,当我尝试使用以下方法迭代我的 map 时:

while(keySetIterator.hasNext()) {
String key = keySetIterator.next();
System.out.println("key: " + key + " value: " + map.get(key));
}

输出为:

Enter the Name file(c:filename.txt): c:name.txt
key: 001 value: finalprogram.Student@5cbc508c
key: 002 value: finalprogram.Student@3419866c
key: 030 value: finalprogram.Student@63e31ee

它完美地存储了键,但我无法让它显示 Student 对象的名称。我也尝试过静态变量,但它返回 null(我在 Student 类中的每个变量和方法中添加了“static”):

Enter the Name file(c:filename.txt): c:name.txt
key: 001 value: null
key: 002 value: null
key: 030 value: null

当我尝试直接调用它时:

System.out.println("key: " + key + " value: " + map.get(Student.getName()));

我收到错误:

Non-static method getName() cannot be referenced rom a static context.

最佳答案

如果您没有为 Student 类提供 toString() 实现,它将打印您所看到的默认值。您可以重写 toString()。

public class Student {
private String name = " ";
public Student(String name) {
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
Course course = new Course();

public String toString() {
return name;
}

}

对于 Student.getName(),您正在尝试调用类上的方法,而不是类的实例。 Student.getName() 是调用静态方法的方式。您想要为非静态方法调用类似 key.getName() 的方法。

但这实际上不是你的问题。正确的语法是 map.get(key).getName();

关于java - 显示存储在 HashMap 中的对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41123600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com