【问题标题】:Translating english to morse-code with a for-loop用for循环将英语翻译成莫尔斯电码
【发布时间】:2015-02-17 22:22:46
【问题描述】:

我已彻底搜索,但在此站点上找不到满意的答案。 我的任务是将一串英文大写字符翻译成莫尔斯电码。

我的计划是遍历字符串并将数组中 (i) 的索引与具有摩尔斯电码索引的字母匹配。

import java.util.Scanner;

public class Morse { 
    public static void main(String[]arg) {
        Scanner Read = new Scanner(System.in);
        String uinput, res = "";

        String[] Eng = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","X","Y","Z"};
        String[] mors = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};

        System.out.println("Ange den text du vill översätta till Morse-kod: ");
        uinput = Read.nextLine();  //uinput = user input 
        for (int i = 0; i < uinput.length(); ) {
            res = res + (mors.charAt(Eng.indexOf(i)));
        }
        System.out.println(res);
    }
}

当我运行它时,我收到错误消息:

Morse.java:16: error: cannot find symbol
  res = res + (mors.charAt(Eng.indexOf(i)));
                                  ^
  symbol:   method indexOf(int)
  location: variable Eng of type String[]
1 error

【问题讨论】:

  • 显然,您的问题是您试图将方法 indexOf 应用于数组而不是 String
  • EngStrings 的(名称不佳)数组,而不是String。因此,它没有编译器通知您的indexOf 方法。您可能想使用Map
  • 查看indexOf 的文档。它需要一个字符或字符串作为参数。
  • 尝试使用HashMap 做你想做的事。字符串数组是不好的方法。

标签: java arrays


【解决方案1】:

你有两个问题。

首先,您没有查看来自uinput 本身的字符。您需要遍历这些字符来构建您的输出。

第二个是Java的内置数组没有indexOf()方法。您有几种选择:

  1. 你可以自己写一个。
  2. 您可以将 Eng 数组的内容放入一个 List(可能是 ArrayList)中,它确实具有 indexOf() 方法。
  3. 由于 Java char 也是数字,您可以将字母本身用作摩尔斯电码数组的索引。 (但要注意大小写问题,并注意“A”的数值不是 0。)

【讨论】:

    【解决方案2】:

    您似乎正在尝试对数组使用 String 方法。我认为正确的方法是遍历数组并检查每个数组的字符。即替换:

      for (int i=0; i<uinput.length();)
      {
      res = res + (mors.charAt(Eng.indexOf(i)));
      }
    

    有了类似的东西:

    for (int i=0; i<uinput.length(); i++)
    {
        for(int j=0; j<Eng.length(); j++){
            if(uipunt.charAt(i) == Eng[j]) {
               res = res + (mors[j]);
               continue;
            }
        }
    }
    

    这没有经过测试,但希望能让你走上正确的道路

    【讨论】:

      【解决方案3】:

      您看到的错误是调用不存在的方法的结果。使用方括号 [] 引用数组。要获得索引 i,我们会说:

      Eng[i]
      

      就我个人而言,我会尊重 ASCII 代码来识别 mores 代码的索引。在这种情况下,字母“A”在 ASCII 中是 65。 “A”是数组中的索引零。所以索引 char 的 ASCII 值(大写)减去 65。

      import java.util.Scanner;
      
      public class MorseCode {
      
          private static final String[] MORS = { ".-", "-...", "-.-.", "-..", ".",
                  "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.",
                  "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--",
                  "-..-", "-.--", "--.." };
      
          public static void main(String... args) {
      
              try (Scanner read = new Scanner(System.in)) {
      
                  System.out.print("Morse-Code It (type \"exit\" to exit): ");
      
                  String text = "";
                  while (!"exit".equals(text.toLowerCase())) {
                      text = removeNonLetters(read.nextLine());
                      System.out.println(toMors(text));
                  }
              }
          }
      
          private static String removeNonLetters(String str) {
              return str.replaceAll("[^A-Za-z]", "");
          }
      
          private static int getIndex(char c) {
              return Character.toUpperCase(c)-65;
          }
      
          private static String toMors(String str) {
              StringBuilder sb = new StringBuilder();
      
              for (int i = 0; i < str.length(); i++) {
                  sb.append(MORS[getIndex(str.charAt(i))]);
                  sb.append("   ");
              }
      
              return sb.toString();
          }
      }
      

      【讨论】:

        【解决方案4】:

        charAt 不是调用字符串数组的有效方法。使用 ArrayList 而不是数组,您应该能够使用 index of。

        【讨论】:

          【解决方案5】:

          我要感谢大家的回答,他们帮助我创建了最终代码:

          import java.util.Scanner;
          public class Morse
          { 
           public static void main(String[]arg)
           {
            Scanner Read = new Scanner(System.in);
            String uinput,utskr = "";
          
          
            String[] letters = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","X","Y","Z"};
            String[] mors = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
            System.out.println("Ange den text du vill översätta till Morse-kod: ");
            uinput = Read.nextLine();
            for (int i=0; i<uinput.length();)
            {
            char currentChar = uinput.charAt(i);
            int charIndex = letters.indexOf(currentChar);
            utskr = utskr + mors[charIndex] + " ";
            }
          
            System.out.println(utskr);
          
           }
          }
          

          【讨论】:

            【解决方案6】:

            Java 代码

            import java.io.BufferedWriter;
            import java.io.File;
            import java.io.FileNotFoundException;
            import java.io.FileOutputStream;
            import java.io.FileWriter;
            import java.io.IOException;
            import java.io.ObjectOutputStream;
            import java.io.ObjectInputStream.GetField;
            import java.lang.reflect.Array;
            import java.util.ArrayList;
            import java.util.Arrays;
            import java.util.Collections;
            import java.util.HashMap;
            import java.util.Iterator;
            import java.util.LinkedList;
            import java.util.Map;
            import java.util.Random;
            import java.util.Scanner;
            import java.util.regex.Matcher;
            import java.util.regex.Pattern;
            
            public class TestProgram {
            
                public static HashMap<String, String> alphaMorse = new HashMap<String, String>();
            
                public static void main(String[] args) throws FileNotFoundException {
                    // TODO Auto-generated method stub
                    alphaMorse.put("A", ".-");
                    alphaMorse.put("B", "-...");
                    alphaMorse.put("C", "-.-.");
                    alphaMorse.put("D", "-..");
                    alphaMorse.put("E", ".");
                    alphaMorse.put("F", "..-.");
                    alphaMorse.put("G", "--.");
                    alphaMorse.put("H", "....");
                    alphaMorse.put("I", "..");
                    alphaMorse.put("J", ".---");
                    alphaMorse.put("K", "-.-");
                    alphaMorse.put("L", ".-..");
                    alphaMorse.put("M", "--");
                    alphaMorse.put("N", "-.");
                    alphaMorse.put("O", "---");
                    alphaMorse.put("P", ".--.");
                    alphaMorse.put("Q", "--.-");
                    alphaMorse.put("R", ".-.");
                    alphaMorse.put("S", "...");
                    alphaMorse.put("T", "-");
                    alphaMorse.put("U", "..-");
                    alphaMorse.put("V", "...-");
                    alphaMorse.put("W", ".--");
                    alphaMorse.put("X", "-..-");
                    alphaMorse.put("y", "-.--");
                    alphaMorse.put("z", "--..");
                    alphaMorse.put("1", ".----");
                    alphaMorse.put("2", "..---");
                    alphaMorse.put("3", "...--");
                    alphaMorse.put("4", "....-");
                    alphaMorse.put("5", ".....");
                    alphaMorse.put("6", "-....");
                    alphaMorse.put("7", "--...");
                    alphaMorse.put("8", "---..");
                    alphaMorse.put("9", "----.");
                    alphaMorse.put("0", "-----");
                    alphaMorse.put(" ", "|");
            
                    String st = "hello";
            
                String morse="";
                    String convertedMorseCode=toMors(st);
                    System.out.print(convertedMorseCode);
                }
            
                public static String toMors(String st){
                    String morse="";
            
                    for (int i = 0; i < st.length(); i++) {
                        char c =st.charAt(i);
            
                        char charUpper = Character.toUpperCase(c);
                        String morseCode= alphaMorse.get(Character.toString(charUpper));
                        //System.out.println(morseCode);
                        morse=  morse+morseCode;
            
                    }
                    return morse;
                }
            }
            

            【讨论】:

            • 当用户输入不是英文字符时,我没有处理边缘情况
            猜你喜欢
            • 1970-01-01
            • 2014-09-18
            • 1970-01-01
            • 2015-09-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多