黑马程序员技术交流社区

标题: 高手来找茬,原封不动抄的代码也会错? [打印本页]

作者: 熊亮    时间: 2013-9-21 20:43
标题: 高手来找茬,原封不动抄的代码也会错?
本帖最后由 熊亮 于 2013-9-21 22:08 编辑
  1. package Day19_IO流;
  2. import java.io.*;
  3. public class L15_ReadIn {
  4.         public static void main(String[] args)throws IOException
  5.         {
  6.                 InputStream in =System.in;
  7.                 StringBuilder sb = new StringBuilder();
  8.                 while(true)
  9.                 {
  10.                         int ch = in.read();
  11.                         if(ch=='\r')
  12.                                 continue;
  13.                         if(ch=='\n')
  14.                         {
  15.                                 String s = sb.toString();
  16.                                 if("over".equals(s));
  17.                                         break;
  18.                                 System.out.println(s.toUpperCase());// 这句代码在myeclipse中报错
  19.                                 sb.delete(0, sb.length());
  20.                         }
  21.                         else
  22.                                 sb.append((char)ch);
  23.                 }
  24.         }
  25. }
复制代码
这是原封不动,老毕视频19-15 读取键盘录入的演示代码
错误提示:Unreachable code



作者: 路边小色狼    时间: 2013-9-21 20:53
本帖最后由 路边小色狼 于 2013-9-21 20:54 编辑
  1. import java.io.*;
  2. public class oo {
  3.         public static void main(String[] args)throws IOException
  4.         {
  5.                 InputStream in =System.in;
  6.                 StringBuilder sb = new StringBuilder();
  7.                 while(true)
  8.                 {
  9.                         int ch = in.read();
  10.                         if(ch=='\r')
  11.                                 continue;
  12.                         if(ch=='\n')
  13.                         {
  14.                                 String s = sb.toString();
  15.                                 if("over".equals(s));
  16.                            
  17.                                 System.out.println(s.toUpperCase());// 这句代码在myeclipse中报错
  18.                                 sb.delete(0, sb.length());
  19.                         }
  20.                         else
  21.                                 sb.append((char)ch);
  22.                 }
  23.         }
  24. }
复制代码
问题出在break
break执行了就结束了。
那句话没用了,所以报错
作者: 路边小色狼    时间: 2013-9-21 21:00
我看错了,忘了。再去看下视频好了{:soso_e113:}
作者: 路边小色狼    时间: 2013-9-21 21:03
    if("over".equals(s));

你在if后面加了分号。怪不得会跳出。太粗心了{:soso_e120:}
作者: 狼人→浪人    时间: 2013-9-21 21:14
本帖最后由 狼人→浪人 于 2013-9-21 21:17 编辑

if(true);//后面的分号表示if已经结束,相当于
if(true){}


在if for  while ...中只要遇到break、continue、return这三个关键字,关键字下面到第一“}”上面的代码都不会被执行,同时工具提醒编译报错!

例如:
while(true){

return false;  // 或者break 、continue
//这里的代码不会被执行,如果你在这里写代码会编译报错
}
作者: 张云飞    时间: 2013-9-21 21:19
本帖最后由 张云飞 于 2013-9-21 21:20 编辑
  1. if("over".equals(s));//这里多一个分号
  2.      break;
复制代码
在使用if等语句时,强烈建议无论后边跟几条语句都使用大括号“{}”,这样不仅增强代码的可读性,也可以避免类似的小错误。像这样:
  1. if("over".equals(s)){
  2.       break;
  3. }
复制代码

作者: 熊亮    时间: 2013-9-21 22:07
张云飞 发表于 2013-9-21 21:19
在使用if等语句时,强烈建议无论后边跟几条语句都使用大括号“{}”,这样不仅增强代码的可读性,也可以避免 ...

嗯,以后就用大括号,免得犯错。

作者: 熊亮    时间: 2013-9-21 22:10
路边小色狼 发表于 2013-9-21 21:03
if("over".equals(s));

你在if后面加了分号。怪不得会跳出。太粗心了 ...

{:soso_e112:}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2