jav小问题,请前辈指点哈

来源:百度知道 编辑:UC知道 时间:2024/06/19 01:41:52
public class ReadLine
{
public static void main(String[] args)
{

byte [] buf = new byte[1024];
String strInfo = null;
int pos = 0;
int ch = 0;
System.out.println("please entrer:");
while(true)
{
try
{
ch = System.in.read();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
switch(ch)
{
case'\r':
break;
case'\n':
strInfo = new String(buf,0,pos);
if(strInfo.equalsIgnoreCase("bye"))
{
return;
}
else
{
System.out.println(strInfo);
pos = 0;
break;
}
default:
buf[pos++] = (byte)ch;
}
}
}
}

这里的ch可不可以用直接用Byte类型;
还有switch这个语句块可不可以详细分析一下他的操作过程,是怎么运作的。谢谢
就是
case'\r':
break;
case&#

ch 不可以用byte 类型的, 因为如果System.in.read() 获取的是int 型, 比byte 的范围大, 除非强制转换, 否则不能转换成为byte.

如果你的读取方式不用System.in.read(), 而是用Scanner 的话, 就可以直接读取byte, Scanner in = new Scanner(System.in);
byte ch = in.nextByte();

switch 语句就和if else if 差不多, 它判断你switch()中的值, 和下面case 中的值以不一样, 如果一样, 就执行case后面的代码, 所以如果你不用break 的话, 就继续执行下面的case 语句, 注意case 只有效一次, 也就是说, 一旦case 的值和switch的是一样的, 那么下面的case 都不会判断了, 举个例子:
int i = 2;
switch (2) {
case 1:
System.out.println(1);
case 2:
System.out.println(2);
case 3:
System.out.println(3);
break;
case 4:
System.out.println(4);
}

那么显示的结果就是
2
3

第一ch可用byte类型 .但 因为在System.in.read();时返回的是一个int.你用int就直接搞定.若用byte时我看还需要进一步的转化.还不如用int来的简单.所以推荐用int而不是其他类型.
第二.switch就是if的另外一种实现

p.s 楼上正解........
就是当为\r时接着运行.当为\n开始判断你输入的是什么东东.要是bye时就退出.
要不就打印东东.
\r应该是空格
\n应该是换行

switch接受的最大类型是int,比int大的就不行了,比如long。float,比int小的byte,s