2017-11-20 2 views
1

Ich habe ein bisschen ein Problem mit meinem Morse-Code, insbesondere ich will es ein einzelnes Fragezeichen ausdrucken, wenn der Benutzer mehr als nur Morse-Code, dh.-Asd, die Ausgabe gibt sein sollte, zur Zeit habe ich es in die nächste Zeile nur überspringen,Morse-Code übersetzen Morse in Sprache Java

import java.util.Scanner; 

public class Morse { 
    static String[] MORSE = { 
     ".-" ,"-...","-.-.","-.." ,"." , //A,B,C,D,E 
     "..-.","--." ,"....",".." ,".---", //F,G,H,I,J 
     "-.-" ,".-..","--" ,"-." ,"---" , //K,L,M,N,O 
     ".--.","--.-",".-." ,"..." ,"-" , //P,Q,R,S,T 
     "..-" ,"...-",".--", "-..-","-.--", //U,V,W,X,Y 
     "--.." //Z 
    }; 
    public static void main(String[] args){ 

    Scanner input = new Scanner(System.in); 

    String line; 
    while(!(line = input.nextLine().toUpperCase()).equals("*")){ 
     String[] words = line.split(" "); 
     String output = ""; 

     for(int i = 0; i< words.length; ++i){ 
      if(words[i].length() == 0){ 
       output += " "; 
       continue; 
      } 
      if(words[i].charAt(0) == '-' || words[i].charAt(0) == '.'){ //if it begins as morse code 
       for (int d = 0; d < MORSE.length; ++d) { 
        if(words[i].equals(MORSE[d])) 
         output += (char)('A'+d); 
       } //i wanted here to make a condition where if it starts as morse and follows with other things other than morse print out a single "?". 
      } else System.out.print("?") //prints ("?") if its not morse code 
+1

Verwenden Sie eine 'Map', um aus der Morse-Code-Zeichenfolge in den Buchstaben zu übersetzen. Drucken Sie das "?" wenn die map.get (morseCodeString) null zurückgibt. – DwB

Antwort

2

Make regulären Ausdrucks an der Spitze außerhalb jeglicher Schleifen „?“:

java.util.regex.Pattern regExPattern= java.util.regex.Pattern.compile("([\\.,\\-]){1,}"); 

dann in Schleife statt

if(words[i].charAt(0) == '-' || words[i].charAt(0) == '.') 

Ihr, wenn sein wird:

 if(regExPattern.matcher(words[i]).matches()) { 
      //it is MORSE code - translate it 
      ... 
     } else { 
      // it is something else 
      System.out.print("?") 
     } 

BTW: Es gibt mehr bessere Lösungen anstatt Arrays. Überprüfen Sie Code in meiner Antwort dort: Morse Code Translator

Nur wundernd von wo diese Aufgabe kam :-)? Es ist zweite ähnliche Frage in letzten 3 Tagen ...

UPD: nur für Schleifen (auch beseitigt es nicht morse .- Sequenzen)

for (int i = 0; i < words.length; ++i) { 
     boolean gotMorse = false; 
     for (int d = 0; d < MORSE.length; d++) { 
      if (MORSE[d].equals(words[i])) { 
       // code found. 
       output += (char) ('A' + d); 
       gotMorse = true; 
       break; 
      } 
     } 
     if (!gotMorse) { 
      output += "?"; 
      // or System.out.print("?"); if you do not need ? in the output 
     } 

    } 

F: wie Sie mit speziellen beschäftigen planen MORSE (zB ...---) oder es ist nicht in Zuordnung?

+0

Danke! Obwohl ich diese Methoden noch nicht kenne, könntest du es nur mit if else oder loops machen? – Koagon

+0

UPD in Antwort betrachten ... – Vadim

+0

Ich plane, ein "?" In diesem Fall habe ich auch den Code getestet, den du gemacht hast, es funktioniert hervorragend! Wie hast du dein aktuelles Level erreicht? Ich strebe danach, ein Kodierer Ihres Niveaus zu sein – Koagon