Problem z kolekcjami (mapa)

0

Cześć,
mam zadanie o treści:

"Napisz program, który będzie pobierał od użytkownika imiona par dopóki
nie wprowadzi imienia „-”, następnie poproś użytkownika o
podanie jednego z wcześniej wprowadzonych imion i wyświetl imię
odpowiadającego mu partnera."

mój problem polega na tym,że podczas gdy wpisze (zakładając że mamy dwa Stringi Name1,Name2 a imiona to Jan,Kasia) skanując pierwsze imię,następnie drugie,program prosi o kolejne imiona,gdy wpiszę "-" program się przerywa,następnie prosi o wcześniej podane imię,i tutaj zaczynają się schody,nie ważne czy wpiszę Jan,Kasia czy "-" program po prostu się zatrzymuje. Oto mój kod

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main {
public static void main(String[] args){

            Scanner scanner = new Scanner(System.in);
    String name1, name2, scan;

    Map<String, String> pairsMap = new HashMap<>();

    while (true) {

        System.out.println("Enter two names" + "\n" + "First");
        name1 = scanner.next();
        System.out.println("Second name");
        name2 = scanner.next();
        if (name1.equals("-")) {
            break;
        }if (name2.equals("-")) {
            break;
        }
        pairsMap.put(name1, name2);
    }
        System.out.println("Enter last given name");
        scan = scanner.next();
        if (scan.equals(pairsMap.get(name1))){
            System.out.println("Your partner name is "+pairsMap.get(name2));
        }else if (scan.equals(pairsMap.get(name2))){
            System.out.println("Your partner name is "+pairsMap.get(name1));
        }else
            System.out.println("Given name is wrong");

    }
}
0

W końcu w pętli wpisujesz -. Po tej akcji name1 i name2 mają jakieś wartości. Nie wpisałeś ich jednak do mapy. Następnie pobierasz od użytkownika imię a w mapie grzebiesz za wartościami dla name1 lub name2 których jak już wspomniałem nie umieściłeś tam - dostajesz zatem null i ostatecznie wykonujesz scan.equals(null).

0

A czy czasem " pairsMap.put(name1, name2);" nie dodaję wartości do mapy?

1

U mnie działa :) http://ideone.com/2GoDAE

0
Sout napisał(a):

A czy czasem " pairsMap.put(name1, name2);" nie dodaję wartości do mapy?

Dodają, aczkolwiek w tym przypadku przed dodaniem wywołujesz break

if (name1.equals("-")) {
            break;
}

Kolejny problem pojawia się tutaj

scan = scanner.next();
if (scan.equals(pairsMap.get(name1))){
...
}

Tak jak kolega @szweszwe napisał, wykorzystujesz starą wartość zmiennej 'name1', a powinieneś był użyć 'scan'. W rezultacie powinno to wyglądać tak:

if (pairsMap.get(scan) != null)){
...
}

W dokumentacji masz opisane jak działa Mapa (klik)

0

Dodawanie imion działa prawidłowo, jedyny problem jest z porównywaniem. W ogóle porównywanie jest napisane bez sensu, ponieważ zakłada, że oba imiona są zarówno kluczami, jak i wartościami. Tymczasem tylko pierwsze imię jest kluczem, z kolei drugie wartością.

1 użytkowników online, w tym zalogowanych: 0, gości: 1