2017-04-20 2 views
0

Ich bin neu in Java und wäre für jede Hilfe dankbar mir jemandJava - Schalten Sie eine Zeichenfolge aus Buchstaben in äquivalente Wörter

geben kann

Ich brauche ein Programm zu schreiben, die für eine Zeichenfolge mit 5 Zeichen den Benutzer auffordert, zum Beispiel asdfg, und wandelt diese in Wörter wie "Apfelspinat Hund Fisch Ziege" um. (Dies sind die Buchstaben, die der Benutzer eingeben wird)

Ich habe versucht, diese in ein Array einzugeben, und ändern Sie die Elemente daraus, aber ich bin mir nicht ganz sicher, wie.

Dies ist der Code, den ich

import java.util.Scanner; 
import static java.lang.System.out; 


public class wordsArray { 
    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 

     System.out.println("Please enter the details of your order"); 
     String myList = scan.nextLine(); 
    } 

     myList[0] = "apple"; 
     myList[1] = "spinach"; 
     myList[2] = "dog"; 
     myList[3] = "fish"; 
     myList[4] = "goat"; 

     //Print all the array elements 
     for (int i = 0; i < myList.length; i++) { 
      System.out.println(myList[i] + " "); 
     } 


    } 

Vielen Dank für jede Hilfe kann jeder so weit haben geben!

+0

Ihre Frage ist nicht sehr klar. Wie würde "asdfg" zu "Fisch" werden? – Vallentin

+0

Sorry für die Verwirrung, a wird "Apfel", s wird "Spinat", d wird "Hund", f wird "Fisch" und g wird "Ziege". – Sean

+0

und wenn du zweite d hast – strash

Antwort

0

Es gibt ein paar Probleme mit dem Code jetzt. Zuerst müssen Sie die empfangene Zeichenfolge in ein Array von Zeichen konvertieren. Um Ihre Listenimplementierung zu verwenden, müssen Sie dann beide Listen durchlaufen, um jedes Eingabezeichen mit dem Wort zu vergleichen, das mit diesem Buchstaben beginnt.

Eine bessere Option ist, die Buchstaben-Wort-Paarungen in eine Karte zu setzen und sie auf diese Weise abzurufen.

Schließlich möchten Sie wahrscheinlich nicht "System.out.println" verwenden, weil Sie dann Ihre Ergebnisse in separaten Zeilen erhalten. Verwenden Sie stattdessen "System.out.print".

public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 

    System.out.println("Please enter the details of your order"); 
    String myString = scan.nextLine(); 
    char[] myChars = myString.toCharArray(); 

    Map<Character, String> map = new HashMap<>(); 
    map.put('a', "apple"); 
    map.put('s', "spinache"); 
    map.put('d', "dog"); 
    map.put('f', "fish"); 
    map.put('g', "goat"); 


    //Print all the array elements 
    for (int i = 0; i < myChars.length; i++) { 
     System.out.print(map.get(myChars[i]) + " "); 
    } 
} 
+0

Brilliant, vielen Dank! – Sean

2

Es ist besser, alle diese Dinge in Karte zu setzen.

Map<Character,String> dataMap = new HashMap<Character,String>(); 
dataMap.put('a',"apple"); 
dataMap.put('s',"spinach"); 
dataMap.put('d',"dog"); 
dataMap.put('f',"fish"); 
dataMap.put('g',"goat"); 

nun Daten in gewünschter Reihenfolge drucken wie unten,

//Print all the array elements 
    for (int i = 0; i < myList.length; i++) { 
     System.out.println(dataMap.get(myList.charAt(i)) + " "); 
    } 
+0

Wenn Ihr Problem gelöst ist, können Sie jede der Antworten akzeptieren –

+0

Vielen Dank für Ihre Hilfe! Ich akzeptierte die andere Antwort, da sie mehr Informationen für jeden gab, der dasselbe Problem hatte wie Ihre Lösungen, aber ich schätze es sehr. – Sean

0

Die Frage ist nicht sehr klar. Aber hier ist eine einfache Lösung für Ihr Problem

public static void main (String[] args) throws java.lang.Exception 
    { 
     // your code goes here 
     Scanner scan = new Scanner(System.in); 

     System.out.println("Please enter the details of your order"); 
     String myList = scan.nextLine(); 

     for(int i=0;i<myList.length();i++){ 
      switch(myList.charAt(i)){ 
       case 'a':System.out.println("Apple"); 
       break; 
       case 's':System.out.println("Spinach"); 
       break; 
       case 'd':System.out.println("Dog"); 
       break; 
       case 'f':System.out.println("Fish"); 
       break; 
       case 'g':System.out.println("Goat"); 
       break; 
       default: System.out.println("Nothing.."); 
        break; 
      } 
     } 
    } 
+0

Zuallererst, Entschuldigung für die Zweideutigkeit meiner Frage, es ist spät und ich bin müde, also erwarte ich nicht viel Sinn. Aber danke für deine Hilfe! – Sean

0

Try this:

String inputString = "asdfg"; //your scan.next(); 

//use array constructor 
String [] myList = {"apple", "spinach", "dog", "fish", "goat"}; 
//start our result string as empty 
String result = ""; 
//for each letter of our input string... 
for(char letter: inputString.toCharArray()){ 
    //...check each of the words in my list to see if they start with that letter 
    for(String word: myList){ 
     if(word.toCharArray()[0] == letter){ 
      result = result + " " + word; 
     } 
    } 
} 
System.out.println(result); //prints "apple spinach dog fish goat" 

Ich denke, dass es sinnvoller sein könnte, eine Karte zu verwenden, um dies zu lösen.

//build a map 
String inputString = "asdfg"; //your scan.next(); 
Map<String, String> myMap = new HashMap<>(); 
myMap.put("a", "apple"); 
myMap.put("s", "spinach"); 
myMap.put("d", "dog"); 
myMap.put("f", "fish"); 
myMap.put("g", "goat"); 
//initilize our result string 
String result = ""; 
//split the string and get our values straight from the map 
for(String letter: inputString.split("")){ 
    result = result + " " + myMap.get(letter); 
} 
System.out.println(result); //" apple spinach dog fish goat" 

Dann können Sie auch diese Funktion funktionell mit reduzieren.

String result = Arrays.stream(inputString.split("")).reduce("", (accumlator, letter) -> accumlator + " " + myMap.get(letter)); 
System.out.println(result); //" apple spinach dog fish goat" 
Verwandte Themen