黑马程序员技术交流社区
标题:
为什么打over,程序结束不了啊
[打印本页]
作者:
李中豪
时间:
2012-3-21 13:27
标题:
为什么打over,程序结束不了啊
import java.io.*;
class Readin
{
public static void main(String[] args) throws IOException
{
InputStream in=System.in;
StringBuilder sb=new StringBuilder();
while(true)
{
int ch=in.read();
if(ch=='\r')
continue;
if(ch=='\n')
{
String s=sb.toString();
if("over".equals(s))
break;
System.out.println(s);
sb.delete(0,sb.length());
}
sb.append((char)ch);
}
}
}
作者:
李成航
时间:
2012-3-21 13:53
String s=sb.toString();
if("over".equals(s))//over不可能等于s,因为s为null
break;
作者:
马云
时间:
2012-3-21 14:13
本帖最后由 马云 于 2012-3-21 14:18 编辑
import java.io.IOException;
import java.io.InputStream;
public class SplitDemo {
public static void main(String[] args) throws IOException {
InputStream in=System.in;
StringBuilder sb=new StringBuilder();
while(true){
char ch=(char)in.read();
if(ch!='\r'&&ch!='\n')
sb.append(ch);
if(ch=='\r')
continue;
if(ch=='\n'){
String s=sb.toString();
if(s.equals("over"))
{
sb.delete(0, sb.length());
break;
}
System.out.println(s);
sb.delete(0, sb.length());
}
//System.out.println("append end:"+sb.toString());
}
}
}
原理随后献上啊
输入一个字符串
读一个字符
判断是不是\r或\n
如果是\r就下一次循环如果是\n就将sb变成字符串
并判断它是否为over如果是就跳出不是就输出
作者:
张锐
时间:
2012-3-21 14:19
LZ仔细观察下输出结果就能找到答案,有个规律就是第一行输入后,输出的是紧挨着输入行的,以后的每行输入,输出后都会有空行。
在看看你的代码。就很明了了, 你在if(ch=='\n')后,把sb清空了。但是这时候ch还是‘\n’,然后你把它加在sb的头部了,所以导致以后的每行输出都有空行,
两种解决办法:
1.把sb.append((char)ch);用else语句包围,
2.清空sb后,加一句continue跳出这次循环
作者:
田斌
时间:
2012-3-21 14:22
忘了写else了
import java.io.IOException;
import java.io.*;
class Readin
{
public static void main(String[] args) throws IOException
{
InputStream in=System.in;
StringBuilder sb=new StringBuilder();
while(true)
{
int ch=in.read();
if(ch=='\r')
continue;
if(ch=='\n')
{
String s=sb.toString();
if("over".equals(s))
break;
System.out.println(s);
sb.delete(0,sb.length());
}else
sb.append((char)ch);
}
}
}
作者:
谢明
时间:
2012-3-21 14:23
本帖最后由 谢明 于 2012-3-21 14:45 编辑
原因是 sb.append((char)ch);前没有加 else 因为没有加 所以 每次的 /r/n
虽然判断了 但还会执行 sb.append((char)ch);
/n 还是被加入了 sb中 所以输出的时候你会发现 除第一次以外
每次的输出最前面 都加入了 一个换行的
你运行的第一次 over是可以结束的 但是 以后的 over 就是 /nover 了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2