无法发现“无法访问的代码”

时间:2012-08-07 16:44:22

标签: java

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

 }
}

7 个答案:

答案 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。我会进一步阻止使用ifif-else阶梯,当有两到三个条件需要检查时,但对于上述示例中的内容,请使用switch statement