2016-05-23 9 views
0

Ich begann vor kurzem zu codieren und ich blieb schon seit einigen Tagen stecken. Also ich brauche „Wert“ von „Schlüssel“ zu bekommen, die wie in der Tabelle ist:Wert kann nicht aus Schlüssel (HashMaps, Textdatei)

one uno 
    two dos 
    three tres 
    four cuatro 

NB: Wörter durch Tab getrennt sind, also „/ t“

und welche Neuling mich mit so etwas wie dies könnte Aussehen erreichen:

import java.util.*; 
    import java.io.*; 
    public class test { 
     public static void main(String[] args)throws FileNotFoundException, IOException { 
    Scanner scanner = new Scanner(new FileReader("C:\\Users\\Admin\\workspace\\test_dict\\src\\source.txt")); 

     HashMap<String,String> map = new HashMap<String,String>(); 

     while (scanner.hasNextLine()) { 
      String[] columns = scanner.nextLine().split("\t"); 

      map.put(columns[0],(columns[1])); 
//enter a key word 
    System.out.println("Enter a word"); 
    String[] columns = scanner.nextLine(); 
//ignoring upper and lower case 
      columns=columns.toLowerCase(); 
// returns the element associated with the key 
      System.out.println(map.get(columns[])); 

    //close files 
     scanner.close(); 
     } 
     } 
    } 

Das Problem ist: ich habe die Konsole eingeben das Schlüsselwort in der Lage sein wollen, und der damit verbundenen Wert zu erhalten. zB:

Enter a word: 
    one 
    uno 

Aber ich kann map.get nicht verwenden (columns []); und wenn ich map.get(columns[0]); aus irgendeinem seltsamen Grund versuchen, es zeigt mir columns[1] so in Konsole bekam ich

Enter a word: 
uno 
Enter a word: 
dos 
Enter a word: 
tres 
Enter a word: 
cuatro 
+0

'String [] columns = scanner.nextLine()' Warum wollen Sie versuchen, die Variable 'columns' wiederzuverwenden und warum denkst du, dass '# nextLine' ein Array zurückgibt? * "wenn ich' map.get (columns [0]) versuche; 'aus irgendeinem seltsamen Grund zeigt es mir' columns [1] '" * Warum ist das komisch? 'Map # get' gibt den Wert zurück, der dem übergebenen Schlüssel zugeordnet ist. Dies ist offensichtlich 'columns [1]', wenn Sie 'columns [0]' übergeben. – Tom

Antwort

0
 scanner.nextLine(); 

die Ausgabe von nextline() ist Zeichenfolge nicht Array von String, so dass Sie es so

tun müssen
String consoleInput = scanner.nextLine(); 
    System.out.println(map.get(consoleInput.toLowerCase())); 
0

Es gibt mehrere Probleme:

  • Sie haben versucht, die Datei zu lesen und Ihre Eingabe in einer while-Anweisung. So wird Ihre Übersetzung nicht vollständig importiert und Sie versuchen bereits, darin zu suchen.
  • Der Typ ist nicht sicher, weil Sie die Scanner-Variable zum Lesen Ihrer Datei "und" der Konsoleneingabe verwenden.

Hier ist ein Beispiel, wie ich möchte versucht, es lösen deutlicher:

import java.util.*; 
import java.io.*; 

public class Test { 
    public static void main(String[] args)throws Exception { 

     Scanner scanner = new Scanner(new FileReader("C:\\Users\\Admin\\workspace\\test_dict\\src\\source.txt")); 

     HashMap<String,String> map = new HashMap<String,String>(); 

     while (scanner.hasNextLine()) { 
      // you are loading a String Array from file to into "columns[]" 
      String[] columns = scanner.nextLine().split("\t"); 

      // The array of the line is splittet in inserted in your map 
      map.put(columns[0],(columns[1])); 

      // That is all, you have to do the input in the outside of your reading while statement 

      //close files 
      scanner.close(); 
     } 

     // Using input from console: http://stackoverflow.com/questions/4644415/java-how-to-get-input-from-system-console 
     String input = null; 
     while ((input = getConsoleInput("Enter a word: ")) != null) { 
      // Use only the input for key-Search 
      System.out.println(map.get(input)); 
     } 


    } 

    // Helper method for reading input 
    public static String getConsoleInput(String message) throws IOException { 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     System.out.print(message); 
     String input = br.readLine(); 
     return input; 
    } 
} 
+0

Das hat mir wirklich geholfen! Die Konsole zeigte zuerst einen Fehler, aber ich habe "scanner.close();" und es unter Konsole Eingabe und Problem gelöst. Alles funktioniert jetzt perfekt! Danke mein Herr! –