Как заставить программу продолжать чтение ввода после выполнения операторов if (переводчик Морзе)

Прежде чем я начну, я начинающий программист, занимаюсь этим всего около дня.

Как мне заставить мою программу продолжать читать мой ввод после того, как ввод был выполнен? для приведенного ниже кода, который предназначен для перевода азбуки Морзе на английский язык, который я пытаюсь сделать, когда я ввожу азбуку Морзе, например.-, он дает мне правильный вывод, A. Но когда я комбинирую буквы Морзе, например.-- ..., который должен быть AB, активируется оператор else. Что я должен делать?

import java.util.Scanner;

общественный класс MorseTranslator {

public static void main(String[] args) {

     System.out.println("Please enter morse code you wish to translate.");
     Scanner sc =new Scanner(System.in);
     String morse = sc.next();



     if (morse.equals(" ")) {
         System.out.print(" ");
        }
     if (morse.equals(".-")){
         System.out.print("A");
        }
     if (morse.equals("-...")){
         System.out.print("B");
        }
     if (morse.equals("-.-.")){
         System.out.print("C");
        }
     if (morse.equals("-..")){
         System.out.print("D");
        }
     if (morse.equals(".")){
         System.out.print("E");
        }
     if (morse.equals("..-.")){
         System.out.print("F");
        }


     else System.out.println("Please input morse code.");

}

}


person Christian Thormeyer    schedule 03.10.2015    source источник


Ответы (2)


String.equals() сравнивает полные строки, поэтому .--... никогда не будет равно .- , поэтому вам нужно «искать» внутри строки Морзе, используя String.indexOf()

 if(morse.indexOf(".-")!=-1){
    System.out.print("A");
    //need more magic here
 }

теперь вам нужно «вычесть» или вынуть эти два символа из строки Морзе и повторить поиск в цикле.

 if(morse.indexOf(".-")!=-1){
    System.out.print("A");
    morse=morse.substring(morse.indexOf(".-")+2); // where 2 morse characters
    continue; //your hypothetical loop
 }
 if(morse.indexOf("-...")!=-1){
    System.out.print("B");
    morse=morse.substring(morse.indexOf("-...")+4); // where 4 morse characters
    continue; //your hypothetical loop
 }
 ...

не забывайте зацикливаться до тех пор, пока не закончатся данные для обработки

person Ryu    schedule 03.10.2015
comment
кажется, это то, что я ищу, но я хочу иметь возможность понять, что я пишу. Что делает !=-1? - person Christian Thormeyer; 03.10.2015
comment
indexOf() немного отличается от equals() , equals() возвращает логическое значение, true, если обе строки равны, и false, если нет... indexOf() возвращает фактическую позицию внутри строки Морзе, эта позиция идет от 0 до размера Морзе (минус 1), скажем, в вашем случае .--... и если вы ищете .- indexOf даст вам значение 0, которое говорит, что эта строка находится в начале строки Морзе... если indexOf не может найти строка, она вернет значение -1... поэтому, если возвращаемое значение из indexOf отличается от -1, оно было найдено (даже в позиции 0), следовательно (!= означает другое). - person Ryu; 03.10.2015
comment
Выглядит хорошо, но я получаю сообщение об ошибке, говорящее, что продолжение нельзя использовать вне цикла. - person Christian Thormeyer; 03.10.2015
comment
о да, continue используется, когда вы помещаете все в цикл, поэтому сначала выньте их... затем прочитайте о таких циклах, как for, do , while - person Ryu; 03.10.2015
comment
Оказывается, это прекрасно работает для .--..., давая мне AB, но -....- дает мне только A вместо BA. Что дает? - person Christian Thormeyer; 03.10.2015
comment
ммм, вы правы, это будет зависеть от того, как вы будете реализовывать цикл, но, кажется, будет лучше искать строку точно в начале строки Морзе, поэтому, пожалуйста, измените условное выражение на: if(morse.indexOf("-...")==0) (вместо !=-1 измените его на ==0), таким образом, он поймает оба .--... как AB и -....- только как B, просто потому, что вам нужно зациклить его, чтобы снова поймать A ... - person Ryu; 03.10.2015