首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Morse to English程序中Java的错误输出

Morse to English程序中Java的错误输出
EN

Stack Overflow用户
提问于 2017-08-14 19:21:53
回答 3查看 105关注 0票数 1

这是我的莫尔斯电码英语和副Versa的分配标准:

  1. 在莫尔斯密码中,“\”表示一个空白。
  2. 在Morse代码中,空白表示新的字母或数字。

我的代码编译正确,但是输出(运行后)是不正确的。

代码语言:javascript
复制
// Import Scanner.
import java.util.Scanner

public class Project1_szhu1249322
{
public static void main(String[] args)
{
    Scanner input = new Scanner (System.in);
    System.out.println("Would you like to translate 'Morse Code' to English, or 'English' to Morse code? (Enter 'Morse Code' or 'English'.)");
    String unit1 = input.nextLine();
    System.out.println("Enter a string of " + unit1 + " characters (for English, numbers and letters, only): ");
    String amountUnit1 = input.nextLine();
    if (unit1 == "Morse Code")
        toEnglish(amountUnit1);
    else if (unit1 == "English")
        toMorseCode(amountUnit1);
    else
        System.out.println("Invalid data. Enter 'Morse Code' or 'English' without the single quotes.");
}

public static void toMorseCode(String english)
{
    // Declare variables, arrays, and strings.
    int i = 0;
    int l = english.length();
    int i2 = 2 * i;
    String[] lowerAlphabet = {"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","1", "2", "3", "4", "5", "6", "7", "8", "9", "0"};
    String[] upperAlphabet = {"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","1", "2", "3", "4", "5", "6", "7", "8", "9", "0"};
    String[] morseCode = {".-", "-...", "-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--..",".----","..---","...--","....-",".....","-....","--...","---..","----.","-----"};
    morseCode[i] = lowerAlphabet[i];
    StringBuilder morseBuilder = new StringBuilder();

    // for loops and if statements for result.
    for (i = 0; i < l; i++)
    {
        i2 = 2 * i;
        if (english.charAt(i) != ' ')
            morseBuilder.append(morseCode[i2]);
        else
            morseBuilder.append('|');

        if (morseBuilder.charAt(i - 1) != ' ' && morseBuilder.charAt(i + 1) != 0)
            morseBuilder.append(' ');
    }

    morseCode[i] = upperAlphabet[i];
    // for loops and if statements for result.
    for (i = 0; i < l; i++)
    {
        i2 = 2 * i;
        if (english.charAt(i) != ' ')
            morseBuilder.append(morseCode[i2]);
        else
            morseBuilder.append('|');

        if (morseBuilder.charAt(i - 1) != ' ' && morseBuilder.charAt(i + 1) != 0)
            morseBuilder.append(' ');
    }

    // Display results.
    System.out.println("The corresponding Morse code is " + morseBuilder + ".");
}

public static void toEnglish(String morse)
{
    // Declare variables, arrays, and strings.
    int i = 0;
    int l = morse.length();
    int i2 = i / 2;
    String[] lowerAlphabet = {"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","1", "2", "3", "4", "5", "6", "7", "8", "9", "0"};
    String[] upperAlphabet = {"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","1", "2", "3", "4", "5", "6", "7", "8", "9", "0"};
    String[] morseCode = {".-", "-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--..",".----","..---","...--","....-",".....","-....","--...","---..","----.","-----"};

    morseCode[i] = upperAlphabet[i];
    String english;

    StringBuilder englishBuilder = new StringBuilder();

    // for loops and if statements for result.
    for (i = 0; i < l; i++)
    {
        i2 = i / 2;
        if (morse.charAt(i) == '|')
        {
            englishBuilder.append(' ');
        }
        else
            englishBuilder.append(morseCode[i2]);
    }

    morseCode[i] = lowerAlphabet[i];
    // for loops and if statements for result.
    for (i = 0; i < l; i++)
    {
        i2 = i / 2;
        if (morse.charAt(i) == '|')
        {
            englishBuilder.append(' ');
        }
        else
            englishBuilder.append(morseCode[i2]);
    }

    // Display results.
    System.out.println("The corresponding English is " + englishBuilder + ".");
}
}

我的输出如下:

代码语言:javascript
复制
Would you like to translate 'Morse Code' to English, or 'English' to Morse code? (Enter 'Morse Code' or 'English'.)
English
Enter a string of English characters (for English, numbers and letters, only): 
to be
Invalid data. Enter 'Morse Code' or 'English' without the single quotes.

如果-否则的话,这是不对的。与其使用unit1 == "English",不如将无效数据转到最后一个。

另外,对于toEnglish方法中的for循环,我应该如何设置i2?我需要I/ 2,但前提是第一个字符不是空格。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-14 19:30:39

在创建已翻译的字符串时,应该使用以下方法而不是不允许赋值的charAt() =

代码语言:javascript
复制
StringBuilder bob = new StringBuilder();

for (...){
    if (...){
        bob.append(character);
    }
}
String english = bob.toString();

而且,i2总是等于0

这里还有很多其他的小虫子。继续调试,您最终会解决所有这些问题。

票数 1
EN

Stack Overflow用户

发布于 2017-08-14 19:27:56

morse.charAt(i)是一个函数,不能站在赋值的左边。如果需要替换字符,首先将字符串转换为char数组:

代码语言:javascript
复制
 char[] english = morse.toCharArray();
 english[i] = '|';

然后,如果需要,可以将其转换回字符串(new String(myArray))。阅读关于字符串的文章。

这就是错误的原因。就像@Milk建议的那样,当你用char构建答案时,最合理的方法是通过StringBuilder。与数组不同,StringBuilder知道如何增长,创建它时不需要指定大小。

票数 1
EN

Stack Overflow用户

发布于 2017-08-14 19:32:48

还有另一个错误

Project1_szhu1249322.java:67: error:不兼容类型: char不能转换为字符串morseCodei2 = english.charAt(i);

morseCode[i2]返回String,而english.charAt(i)返回原语类型char。更改为morseCode[i2] = String.valueOf(english.charAt(i));,将两者都字符串化

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45681612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档