【发布时间】:2017-08-14 19:21:53
【问题描述】:
这是我的摩尔斯电码到英语和副 Versa 的分配标准:
- 在摩尔斯电码中,|代表空格。
- 在摩尔斯电码中,空格代表新的字母或数字。
我的代码编译正确,但输出(运行后)不正确。
// 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",而是转到最后一个else for Invalid Data。
另外,对于toEnglish方法中的for循环,我应该如何设置i2?我需要 i / 2,但前提是第一个字符不是空格。
【问题讨论】:
-
有人可以解释为什么它确实给了我意外的类型错误吗?我再次面对它,我不知道该怎么办。
-
问题中的代码是否正是您程序中的代码?以下是我一目了然的错误:
morse.charAt(i) = '|'应该使用==进行比较。i2的值永远不会更新,因此将始终为0。morseCode[i] = upperAlphabet[i]; morseCode[i] = lowerAlphabet[i];将导致morseCode[i] = lowerAlphabet[i];并且您永远不会看到它是upperAlphabet[i]。不确定第二个if语句在toMorseCode中的意义是什么 -
您不应该使用 Stack Overflow 为您调试整个程序。 Stack Overflow 用于发布一个问题并获得一个答案。 How To Ask。了解如何使用调试器并逐步执行您的代码。如果您仍然卡住,请发布另一个问题
-
很抱歉。
-
第二个 if 是在字符之间留一个空格。