1

好的,所以我知道那里还有其他摩尔斯电码答案,但我看过很多,但没有一个有效。对于我的任务,我要将文件 Morse.txt 读入并行数组。相反,我只制作了两个文件,Morse.txt 和 Alphabet.txt,一个带有代码,另一个带有数字和字母。我应该使用我制作的一个类来完成翻译部分,当在 main 中调用它时,它应该翻译用户输入。我似乎无法让这个工作。我已经尝试了很多东西,在类或 getter 中使用 toString,但是当我放入我认为必须存在的循环时找不到返回(如果这有意义的话)..无论如何,这是我的代码主要的:

import java.util.*;
import java.util.Scanner;
import java.io.*;

public class redo
{
    public static void main(String[]args) throws IOException
    {
        String line2, file2 = "Morse.txt";
        String line, file = "Alphabet.txt";

        File openFile = new File(file);
        File openFile2 = new File(file2);

        Scanner inFile = new Scanner(openFile);
        Scanner inFile2 = new Scanner(openFile2);

        int index = 36;
        char[] charArray = new char[index]; 
        String[] code = new String[index];

        for(index = 0; index < 36; index++)
        {   
            while(inFile.hasNext())
            {
                    line = inFile.nextLine();
                    charArray = line.toCharArray();
                    //System.out.println(charArray[index]);
            }
        }       

        for(index = 0; index < 36; index++)
        {
            while(inFile2.hasNext())
            {
                code[index] = inFile2.nextLine();
                //System.out.println(code[index]);
            }
        }

        Scanner keyboard = new Scanner(System.in);

        String userInput;

        System.out.println("Enter something to translate: ");
        userInput= keyboard.nextLine();

        Translate inputTranslate = new Translate(userInput);

        inputTranslate.setInput(userInput);

        inputTranslate.setAlph(charArray);
        inputTranslate.setCode(code);

        inFile.close();
    }
}

这是我的翻译课(有些东西被注释掉了):

public class Translate
{
    String input;
    String code[];
    char alph[];

    public Translate(String input)
    {
        this.input = input;
    }

    public void setInput(String input)
    {
        this.input = input;
    }

    public void setAlph(char[] alph)
    {
        this.alph = alph;
    }

    public void setCode(String[] code)
    {
        this.code = code;
    }

    public String getInput()
    {
        return input;
    }

//  public String getTranslate()
//  {
//      for(int i = 0; i < input.length(); i++)
//      {
//          for(int index = 0; index < alph.length; index++)
//          {
//              if(input.charAt(i) == alph[index])
//              {
//                  String output = code[index];
//              }
//          }
//      }
//      return output;
//  }


}

莫尔斯.txt:

.---- ..--- ...-- ....- ..... -.. --... ---..

----.

.- -... -.-。-... ...-. --. .... .. .---- -.-

.-..

-。

.--. --.- .-.

...

..- ...- .-- -..- -.-- --..

Alphabet.txt: 1 2 3 4 5 6 7 8 9 0 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

4

1 回答 1

1

The problem is your return can't reach "output", you need to declare "output" above the loops and initialise it to output = null;

Even then it'll only send one string. So I did this;

public String getTranslate()
{
    String output = null;
    String[] translated = new String[input.length()];
    for(int i = 0; i < input.length(); i++)
    {
        for(int index = 0; index < alph.length; index++)
        {
            if(input.charAt(i) == alph[index])
            {
                output = code[index];
                translated[i] = output;
            }
        }
    }
    for (int j = 1; j < translated.length; j++) {
        output = translated[0].concat(translated[j]);
    }
    return output;
}

This basically sticks all the codes together giving you your desired outcome.

于 2012-11-01T23:52:05.380 回答