控制台中的哈希图输出
Hashmap output in console
我正在努力 "project" 将一些数据保存在 Hashmap 中,稍后我想在我的控制台中打印出来。
我几乎完成了整个代码,但在我的控制台中给出它时遇到了问题......
到目前为止我的代码是:
import java.util.HashMap;
import java.util.Scanner;
public class Passwordsaver` {
public static void main(String[] args) throws InterruptedException {
// declare the hashmap
HashMap<Integer, String> Password = new HashMap<>();
boolean loopAgain = true;
Scanner scan = new Scanner(System.in);
// loop while user not entering no
do {
// ask for account (page)
System.out.print("Enter Page:");
String page = scan.nextLine();
// ask for password
System.out.print("Enter Password");
String password = scan.nextLine();
// add the key value pair from user input to the hashmap
String oldVal = password + page;
if (oldVal!=null) {
System.out.println("The password for the page: " + page + " is "
+ password + " and will be overwritten if entered again");
}
// ask user to check if another entry is required
System.out.print("Enter another account (y/n)?");
String answer = scan.nextLine();
// condition to satisfy in order to loop again
loopAgain = (answer.equals("y") || answer.equals("Y"));
} while (loopAgain);
scan.close();
System.out.println("\n**********************************");
System.out.println("The following accounts are in database");
System.out.println(" account "+ " password");
for(int page:Password.keySet()){
System.out.println(" "+ Password +" "+Password.get(page));
}
System.out.println("\n**********************************");
}
}
除最后一步外一切正常...我如何打印它?
是否也可以保存数据以便以后我仍然可以更改地图而无需一直打开 Eclipse?
非常感谢!!!
您正在打印完整的 HashMap(密码),而不是每个条目的键。
看看下面的循环:
for(int page:Password.keySet()){
System.out.println(" "+ page +" "+Password.get(page));
}
这里我们打印条目的键和值。
在性能方面,最好迭代 entrySet
,这样您就没有查找的额外成本:
for(Map.Entry<Integer,String> entry:Password.entrySet()){
System.out.println(" "+ entry.getKey() +" " + entry.getValue());
}
编辑
此外,您忘记将 page/password 组合存储在哈希图中。添加
Password.put(page, password)
存储数据。
您还必须将 HashMap 的类型更改为 HashMap<String,String>
以下代码将起作用:
Map<Integer, String> passwords = ...
for (Map.Entry<Integer, String> entry : passwords.entrySet()) {
// iterates over every entry in the map, creates a variable called "entry"
int key = entry.getKey();
String value = entry.getValue();
// now you can print with whatever formatting you want. e.g.:
System.out.println("account: " + key + ", password: " + password);
}
或者,使用Java 8个函数样式代码:
passwords.forEach((key, value) -> {
System.out.println("account: " + key + ", password: " + password);
});
如果要存储数据,请查看 JSON 和 Jackson Databind 库。这是一个将 Java 对象映射到 JSON 并返回的库(这不是它的全部功能,只是功能之一)。简而言之,您可以将 Map
与 String
相互转换,这样它就可以保存为 file/sent 而不是 network/etc。
我正在努力 "project" 将一些数据保存在 Hashmap 中,稍后我想在我的控制台中打印出来。 我几乎完成了整个代码,但在我的控制台中给出它时遇到了问题...... 到目前为止我的代码是:
import java.util.HashMap;
import java.util.Scanner;
public class Passwordsaver` {
public static void main(String[] args) throws InterruptedException {
// declare the hashmap
HashMap<Integer, String> Password = new HashMap<>();
boolean loopAgain = true;
Scanner scan = new Scanner(System.in);
// loop while user not entering no
do {
// ask for account (page)
System.out.print("Enter Page:");
String page = scan.nextLine();
// ask for password
System.out.print("Enter Password");
String password = scan.nextLine();
// add the key value pair from user input to the hashmap
String oldVal = password + page;
if (oldVal!=null) {
System.out.println("The password for the page: " + page + " is "
+ password + " and will be overwritten if entered again");
}
// ask user to check if another entry is required
System.out.print("Enter another account (y/n)?");
String answer = scan.nextLine();
// condition to satisfy in order to loop again
loopAgain = (answer.equals("y") || answer.equals("Y"));
} while (loopAgain);
scan.close();
System.out.println("\n**********************************");
System.out.println("The following accounts are in database");
System.out.println(" account "+ " password");
for(int page:Password.keySet()){
System.out.println(" "+ Password +" "+Password.get(page));
}
System.out.println("\n**********************************");
}
}
除最后一步外一切正常...我如何打印它? 是否也可以保存数据以便以后我仍然可以更改地图而无需一直打开 Eclipse?
非常感谢!!!
您正在打印完整的 HashMap(密码),而不是每个条目的键。 看看下面的循环:
for(int page:Password.keySet()){
System.out.println(" "+ page +" "+Password.get(page));
}
这里我们打印条目的键和值。
在性能方面,最好迭代 entrySet
,这样您就没有查找的额外成本:
for(Map.Entry<Integer,String> entry:Password.entrySet()){
System.out.println(" "+ entry.getKey() +" " + entry.getValue());
}
编辑
此外,您忘记将 page/password 组合存储在哈希图中。添加
Password.put(page, password)
存储数据。
您还必须将 HashMap 的类型更改为 HashMap<String,String>
以下代码将起作用:
Map<Integer, String> passwords = ...
for (Map.Entry<Integer, String> entry : passwords.entrySet()) {
// iterates over every entry in the map, creates a variable called "entry"
int key = entry.getKey();
String value = entry.getValue();
// now you can print with whatever formatting you want. e.g.:
System.out.println("account: " + key + ", password: " + password);
}
或者,使用Java 8个函数样式代码:
passwords.forEach((key, value) -> {
System.out.println("account: " + key + ", password: " + password);
});
如果要存储数据,请查看 JSON 和 Jackson Databind 库。这是一个将 Java 对象映射到 JSON 并返回的库(这不是它的全部功能,只是功能之一)。简而言之,您可以将 Map
与 String
相互转换,这样它就可以保存为 file/sent 而不是 network/etc。