我的程序中有些东西没有意义。它可能是我的while语句,它嵌入了几个不同的if语句循环。但主要的错误是指向我的while循环,我似乎无法弄明白。我评论了错误的位置。
这是程序的样子:
import java.util.*;
import java.io.*;
class MorseCode
{
public static void main (String [] args) throws FileNotFoundException
{
Scanner keyboard = new Scanner(new File("myfile.txt"));
String text = " ";
while (keyboard.hasNextLine())
{
text = keyboard.nextLine();
morse(text); // Goes through morse(text);
String code = ""; // String is declared
code = morse(text);
System.out.println(code); // prints the code which is being called upon morse(text)
}
keyboard.close();
}
static String morse(String text)
{
String code = "";
int i = 0;
while (true) {
if (text.charAt(i) == 'a' || text.charAt(i) == 'A')
System.out.print(".-");
if (text.charAt(i) == 'b' || text.charAt(i) == 'B')
System.out.print("-...");
if (text.charAt(i) == 'c' || text.charAt(i) == 'C')
System.out.print("-.-.");
if (text.charAt(i) == 'd' || text.charAt(i) == 'D')
System.out.print("-..");
if (text.charAt(i) == 'e' || text.charAt(i) == 'e')
System.out.print(".");
if (text.charAt(i) == 'f' || text.charAt(i) == 'F')
System.out.print("..-.");
if (text.charAt(i) == 'g' || text.charAt(i) == 'G')
System.out.print("--.");
if (text.charAt(i) == 'h' || text.charAt(i) == 'H')
System.out.print("....");
if (text.charAt(i) == 'i' || text.charAt(i) == 'I')
System.out.print("..");
if (text.charAt(i) == 'j' || text.charAt(i) == 'J')
System.out.print(".---");
if (text.charAt(i) == 'k' || text.charAt(i) == 'K')
System.out.print("-.-");
if (text.charAt(i) == 'l' || text.charAt(i) == 'L')
System.out.print(".-..");
if (text.charAt(i) == 'm' || text.charAt(i) == 'M')
System.out.print("--");
if (text.charAt(i) == 'n' || text.charAt(i) == 'N')
System.out.print("-.");
if (text.charAt(i) == 'o' || text.charAt(i) == 'O')
System.out.print("---");
if (text.charAt(i) == 'p' || text.charAt(i) == 'P')
System.out.print(".--.");
if (text.charAt(i) == 'q' || text.charAt(i) == 'Q')
System.out.print("--.-");
if (text.charAt(i) == 'r' || text.charAt(i) == 'R')
System.out.print(".-.");
if (text.charAt(i) == 's' || text.charAt(i) == 'S')
System.out.print("...");
if (text.charAt(i) == 't' || text.charAt(i) == 'T')
System.out.print("-");
if (text.charAt(i) == 'u' || text.charAt(i) == 'U')
System.out.print("..-");
if (text.charAt(i) == 'v' || text.charAt(i) == 'V')
System.out.print("...-");
if (text.charAt(i) == 'w' || text.charAt(i) == 'W')
System.out.print(".--");
if (text.charAt(i) == 'x' || text.charAt(i) == 'X')
System.out.print("-..-");
if (text.charAt(i) == 'y' || text.charAt(i) == 'Y')
System.out.print("-.--");
if (text.charAt(i) == 'z' || text.charAt(i) == 'Z')
System.out.print("--..");
if (text.charAt(i) == '1')
System.out.print(".----");
if (text.charAt(i) == '2')
System.out.print("..---");
if (text.charAt(i) == '3')
System.out.print("...--");
if (text.charAt(i) == '4')
System.out.print("....-");
if (text.charAt(i) == '5')
System.out.print(".....");
if (text.charAt(i) == '6')
System.out.print("-....");
if (text.charAt(i) == '7')
System.out.print("--...");
if (text.charAt(i) == '8')
System.out.print("---..");
if (text.charAt(i) == '9')
System.out.print("----.");
if (text.charAt(i) == '0')
System.out.print("-----");
if (text.charAt(i) == '-')
System.out.print("...");
if (text.charAt(i) == ' ')
System.out.print(".......");
i++;
}
if (i < text.length()); //Unreachable code
return code;
}
}
答案 0 :(得分:10)
将支架向下移动一个(在i ++之后),所以它是这样的:
if (text.charAt(i) == '0')
System.out.print("-----");
if (text.charAt(i) == '-')
System.out.print("...");
if (text.charAt(i) == ' ')
System.out.print(".......");
i++;
if (i < text.length()) //Reachable code now :)
return code;
}
}
}
这样你就可以到达那里检查你是否准备爆发的地方
您还可以将while循环的条件从true更改为(i&lt; text.length()),但您当前的代码建议您尝试执行上述操作,但只是错放了括号:)
另外,不确定你在这里做什么;你想打印还是退货?代码的值永远不会从“”更改,但您仍然会返回该值。我认为你应该用代码+ =替换打印件,这样你实际上会返回合适的东西,然后你可以做System.out.println(莫尔斯(“Something”));
答案 1 :(得分:7)
你的while循环永远不会终止。
如果你想迭代文本字符串中的字符,我建议你改变:
while (true) {
到
while (i < text.length()) {
然后在while循环完成后返回code
。
我还建议您使用 if-else 语句而不是一系列if语句,以便不必为每个字符评估所有if条件。
答案 2 :(得分:4)
这是你的while(true)
。循环永远不会结束,因此永远不会到达循环后的代码。
使用设置为true的布尔变量。
boolean x = true;
while (x) {...}
答案 3 :(得分:3)
您使用while (true) {
- 这将永远不会终止。
如果您想使用:
while (keyboard.hasNext()) {
然后您需要将Scanner实例传递给您的莫尔斯方法。一般来说,尽管这种方法最好只做一个工作 - 翻译。为什么不使用Map<String, String>
存储您的莫尔斯翻译并使用translateMorse方法?
答案 4 :(得分:2)
您的程序将永久停留在while(true)循环中,因为根据定义,真实条件始终为真。
答案 5 :(得分:2)
你的while循环应该是
while (i < text.length()) {
应该删除无法访问的if语句,你应该只做
return code;
答案 6 :(得分:2)
1。您的代码将永不终止,因为它位于Infinite while loop
。
2。您while( i<text.length() )
而不是 while(true)
3。我会进一步阻止使用if
或if-else
阶梯,当有两到三个条件需要检查时,但对于上述示例中的内容,请使用switch statement
。