1

我的程序中有一些没有意义的东西。可能是我的 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;

 }
}
4

7 回答 7

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 < text.length()),但您当前的代码表明您正在尝试执行上述操作,但只是放错了括号:)

另外,不确定您在这里要做什么;您要打印还是退回?code 的值永远不会从 "" 改变,但你仍然返回它。我认为你应该用 code+= 替换打印,这样你才能真正返回适当的东西,然后你可以做 System.out.println(morse("Something"));

于 2012-08-07T16:46:48.983 回答
7

您的 while 循环永远不会终止。

如果您想遍历文本字符串中的字符,我建议您更改:

while (true) {

while (i < text.length()) {

code然后在while循环完成后简单地返回。

我还建议您使用if-else语句而不是一系列 if 语句,这样就不必为每个字符评估所有 if 条件。

于 2012-08-07T16:49:03.287 回答
4

是你的while(true)。循环永远不会结束,因此永远不会到达循环之后的代码。

使用设置为 true 的布尔变量。

boolean x = true;
while (x) {...}
于 2012-08-07T16:48:27.280 回答
3

您使用while (true) {- 这将永远不会终止。

如果您想使用:

while (keyboard.hasNext()) {

那么您需要将 Scanner 实例传递给您的 morse 方法。一般来说,虽然最好让这种方法只做一项工作——翻译。为什么不使用 aMap<String, String>来存储您的莫尔斯翻译并使用 translateMorse 方法?

于 2012-08-07T16:46:24.597 回答
2

您的程序将永久卡在 while(true) 循环中,因为根据定义,真条件始终为真。

于 2012-08-07T16:47:14.957 回答
2

1.你的代码永远不会终止,因为它在一个Infinite while loop.

2.while( i<text.length() ) 代替 while(true)

3.我会进一步不鼓励使用iforif-else梯子,当有两到三个条件要检查时它是可以的,但是对于像你上面例子中的东西,使用switch statement.

于 2012-08-07T17:17:43.760 回答
2

你的while循环应该是
while (i < text.length()) {

并且应该删除无法访问的 if 语句,您应该在那里做
return code;

于 2012-08-07T16:49:37.610 回答