Вывод хеш-карты в консоль - PullRequest
1 голос
/ 25 января 2020

Я работаю над небольшим «проектом» для сохранения некоторых данных в 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 все время?

Заранее большое спасибо !!!

Ответы [ 2 ]

0 голосов
/ 25 января 2020

Будет работать следующий код:

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);
});

Если вы хотите сохранить данные, посмотрите JSONs и библиотека данных Джексона. Это библиотека для отображения Java объектов в JSON и обратно (это не все, что она делает, а только одна из функций). Короче говоря, вы можете конвертировать Map в String и обратно, чтобы его можно было сохранить в файл / отправить по сети / et c.

0 голосов
/ 25 января 2020

Вы печатаете полный HashMap (пароль), а не ключ каждой записи. Посмотрите на следующее l oop:

 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());
    }

РЕДАКТИРОВАТЬ

Кроме того, вы забыли сохранить комбинацию страницы / пароля в своей хэш-карте. Добавьте Password.put(page, password) для хранения данных.

Вы также должны изменить тип на HashMap на HashMap<String,String>

...