2015-10-03 2 views
1

Я очень новичок в программировании, и у меня возникают проблемы с пониманием циклов, когда вы не работаете с целыми числами. Я пытаюсь сделать английский в код Морзе переводчик и это было сделано до сих пор:Как закодировать эти операторы if?

import java.util.Scanner; 

общественного класса EnglishToMorse {

public static void main(String[] args) { 

    System.out.println("Please enter text you wish to convert to Morse Code."); 
    Scanner sc =new Scanner(System.in); 
    String english = sc.next(); 


     if (english.equalsIgnoreCase("A")){ 
      System.out.print(".- "); 
     } 
     if (english.equalsIgnoreCase("B")){ 
      System.out.print("-... "); 
     } 
     if (english.equalsIgnoreCase("C")){ 
      System.out.print("-.-. "); 
     } 
     if (english.equalsIgnoreCase("D")){ 
      System.out.print("-.. "); 
     } 
     if (english.equalsIgnoreCase("E")){ 
      System.out.print(". "); 
     } 
     if (english.equalsIgnoreCase("F")){ 
      System.out.print("..-. "); 
     } 
     if (english.equalsIgnoreCase("G")){ 
      System.out.print("--. "); 
     } 
     if (english.equalsIgnoreCase("H")){ 
      System.out.print(".... "); 
     } 
     if (english.equalsIgnoreCase("I")){ 
      System.out.print(".. "); 
     } 
     if (english.equalsIgnoreCase("J")){ 
      System.out.print(".--- "); 
     } 
     if (english.equalsIgnoreCase("K")){ 
      System.out.print("-.- "); 
     } 
     if (english.equalsIgnoreCase("L")){ 
      System.out.print(".-.. "); 
     } 
     if (english.equalsIgnoreCase("M")){ 
      System.out.print("-- "); 
     } 
     if (english.equalsIgnoreCase("N")){ 
      System.out.print("-. "); 
     } 
     if (english.equalsIgnoreCase("O")){ 
      System.out.print("--- "); 
     } 
     if (english.equalsIgnoreCase("P")){ 
      System.out.print(".--. "); 
     } 
     if (english.equalsIgnoreCase("Q")){ 
      System.out.print("--.- "); 
     } 
     if (english.equalsIgnoreCase("R")){ 
      System.out.print(".-. "); 
     } 
     if (english.equalsIgnoreCase("S")){ 
      System.out.print("... "); 
     } 
     if (english.equalsIgnoreCase("T")){ 
      System.out.print("- "); 
     } 
     if (english.equalsIgnoreCase("U")){ 
      System.out.print("..- "); 
     } 
     if (english.equalsIgnoreCase("V")){ 
      System.out.print("...- "); 
     } 
     if (english.equalsIgnoreCase("W")){ 
      System.out.print(".-- "); 
     } 
     if (english.equalsIgnoreCase("X")){ 
      System.out.print("-..- "); 
     } 
     if (english.equalsIgnoreCase("Y")){ 
      System.out.print("-.-- "); 
     } 
     if (english.equalsIgnoreCase("Z")){ 
      System.out.print("--.. "); 
     } 
     if (english.equalsIgnoreCase("1")){ 
      System.out.print(".---- "); 
     } 
     if (english.equalsIgnoreCase("2")){ 
      System.out.print("..--- "); 
     } 
     if (english.equalsIgnoreCase("3")){ 
      System.out.print("...-- "); 
     } 
     if (english.equalsIgnoreCase("4")){ 
      System.out.print("...- "); 
     } 
     if (english.equalsIgnoreCase("5")){ 
      System.out.print("..... "); 
     } 
     if (english.equalsIgnoreCase("6")){ 
      System.out.print("-.... "); 
     } 
     if (english.equalsIgnoreCase("7")){ 
      System.out.print("--... "); 
     } 
     if (english.equalsIgnoreCase("8")){ 
      System.out.print("---.. "); 
     } 
     if (english.equalsIgnoreCase("9")){ 
      System.out.print("----. "); 
     } 
     if (english.equalsIgnoreCase("0")){ 
      System.out.print("----- "); 
     } 


} 

}

После многочисленных попыток попробовать различные Lops и условия , Я не могу пройти мимо вопроса о том, что моя программа может только перевести один символ. Если я вводил несколько, он завершается. Если бы кто-то мог привести меня по правильному пути в определении того, как закодировать эти утверждения if, пока все символы не будут переведены, я был бы очень благодарен.

+0

Вы пытаетесь сравнить всю строку. Если строка «hello», вы должны переводить каждую из букв в ней один за другим - сначала «h», затем «e» и так далее. Для этого вам нужно начать с буквы с нулевым индексом, затем перейти к букве с 1 индексом и так далее. Знаете ли вы методы, которые дают вам длину строки и символ в данном индексе? – RealSkeptic

+0

Не уверен, но если бы вы могли объяснить, это было бы здорово! –

ответ

1

Как только вы успешно извлечете слово ввода пользователя, вы можете перебрать это слово. Взгляните на toCharArray. В документации, это

Преобразует эту строку в новый массив символов.

Так что ваш код будет выглядеть следующим образом:

for (char c : english.toCharArray()){ 
    if (c == 'A'){ 
     System.out.print(".- "); 
    }else if (c == 'B'){ 
     //etc... 
    } 
} 

Обратите внимание на следующее:

  • Вам не нужно звонить .equals на char c, потому что это примитивный
  • Это реализация использует расширенный цикл for. Вы можете прочитать больше о них here
+0

Этот ответ + один из Павла был бы лучшим сочетанием :) –

+0

Как бы я получил примитив c, чтобы игнорировать случай ввода? –

0

Я хотел бы использовать эту

char[] ca = english.toCharArray(); 

, то вы можете петля

for (char c : ca) { 
//... your code   
} 

и улучшить некоторые более использовать синтаксис переключателя на с

эс.

switch (c) { 
case 'A': 
    System.out.print(".- "); 
    break; 
default: 
    break; 
} 
3

Используйте HashMap представлять переводы:

HashMap<Character , String> char_to_morse = new HashMap<>(); 
char_to_morse.put('A' , ".- "); 
//put all other chars in the map here 

//retrieving a code: 
System.out.print(char_to_morse.get(someChar)); 
0

Я думаю, что это то, что вы ищете:

Scanner sc = new Scanner(System.in); 
String english; 

while (sc.hasNext()){  //While there is another token in Scanner 
    english = sc.next(); //Give the next token to english variable 

    // Your code with the ifs 

}