JAVA学习中....有个问题大家给点帮助!
以下是我做的一个课后题,可是为什么读入的数不是输入的数呢?
i=System.in.read();
为什么读的不是输入的数???
class Chapter32
{
static int ternary(int x)
{
return x<10 ? x*100:x+10;
}
static int alternative(int x)
{
if (x<10)
return x*100;
else
return x+10;
}
public static void main(String[] args)
{
int i=10;
try
{i=System.in.read();
}catch (Exception e){};
System.out.println("x="+i);
System.out.println("ternary:"+ternary(i));
System.out.println("alternative:"+alternative(i));
}
}
问题点数:20、回复次数:8Top
1 楼believefym(feng)回复于 2005-09-22 23:06:50 得分 0
read读的是一个byte,
用readline吧Top
2 楼liwenchao()回复于 2005-09-22 23:09:06 得分 5
出错的原因很简单,你用int n=(int)System.in.read()所读取是字符的ASCII码值,而不是实际的整数值,故出现了错误,两个问题都是这个情况!
建议你先把它们读入一个buf中,而后再进行转换!譬如:
public static void main(String args[]) throws IOException
{
int n;
byte[] buf=new byte[20];
System.out.println("Please the value of n:");
System.in.read(buf);
int n=Integer.parseInt(new String(buf).trim());
System.out.println("n="+n);
}Top
3 楼wanghao233(啊!飞碟)回复于 2005-09-22 23:11:49 得分 0
学习。Top
4 楼rainly1985(不在彷徨)回复于 2005-09-22 23:12:54 得分 0
读入的是字符,你要把它转换成int 啊Top
5 楼yunjixiaoxiang(被鱼抛弃的猫)回复于 2005-09-23 01:29:02 得分 5
import java.io.*;
class Chapter32
{
static int ternary(int x)
{
return x < 10 ? x*100 : x + 10;
}
static int alternative(int x)
{
if (x < 10)
return x * 100;
else
return x + 10;
}
public static void main(String[] args)
{
int i=10;
/**try
{
i=System.in.read();
}
catch (IOException e){}
*/
System.out.println("x="+i);
System.out.println("ternary:"+ternary(i));
System.out.println("alternative:"+alternative(i));
}
}
楼主把那段异常代码注销掉
得到的应该是你想要的结果吧Top
6 楼buleleaf01()回复于 2005-09-23 12:23:49 得分 0
i=System.in.read();这是得到的是数字,因为java为了发展其全球性,字符使用的是16位的char型,范围是0~65535,和int型(32位)兼容。也就是经常说得Unicode编码,这就能支持世界上所有的文字,所以无论你在键盘上输入什么数字,其到达计算机内依旧是数字,而且是Unicode编码的数字。
比方说,如果你在键盘输入1,那么如果用System.out.print输出的话,将得到49,因为1在Unicode中的编码是49,所以如果你想得到你要的准确结果的时候,一定要造型。
本例中你需要得到准确的数字,因为是数字,又和int兼容所以如果你的这句改成这样:
i=(int)System.in.read();
就完全可以了,^_^。
祝你成功!Top
7 楼buleleaf01()回复于 2005-09-23 12:27:49 得分 10
不,上面还有错误
应该是:
i=(char)System.in.read()//这是造型得到输入的字符
(int)i;
然后就可以了
不好意思Top
8 楼xiaomu528(小木)回复于 2005-09-23 12:36:14 得分 0
学习中.....Top




