簡體   English   中英

莫爾斯英語翻譯程序中Java輸出不正確

[英]Incorrect output for Java in a Morse to English program

這是我的英語摩爾斯電碼和Vice Versa分配標准:

  1. 在摩爾斯電碼中,| 代表空白。
  2. 在摩爾斯電碼中,空格代表新字母或數字。

我的代碼正確編譯,但是輸出(運行后)不正確。

// 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 + ".");
}
}

我的輸出是這樣的:

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.

它不會轉到右邊的if-else分支。 而不是轉到unit1 ==“ English”,它將轉到Invalid Data的最后一個。

另外,對於toEnglish方法中的for循環,我應該如何設置i2? 我需要i / 2,但前提是第一個字符不是空格。

morse.charAt(i)是一個函數,不能位於分配的左側。 如果需要替換字符,請首先將字符串轉換為char數組:

 char[] english = morse.toCharArray();
 english[i] = '|';

然后您可以在需要時將其轉換回字符串( new String(myArray) )。 了解有關String的信息

這就是錯誤的原因。 在按字符構建答案字符時,最合理的方法是通過StringBuilder ,如@Milk所建議。 與數組不同, StringBuilder知道如何增長,創建時無需指定大小。

創建轉換后的字符串時,應使用以下內容代替charAt() = ,這不允許分配:

StringBuilder bob = new StringBuilder();

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

同樣, i2將始終等於0

這里還有許多其他小錯誤。 進行調試,您將最終解決所有問題。

還有另一個錯誤

Project1_szhu1249322.java:67:錯誤:不兼容的類型:char無法轉換為字符串morseCode [i2] = english.charAt(i);

morseCode[i2]返回String ,而english.charAt(i)返回原始類型char 更改為morseCode[i2] = String.valueOf(english.charAt(i)); 把他們都帶到弦

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM