黑马程序员技术交流社区
标题:
99乘法表的循环问题出错,请指点
[打印本页]
作者:
孙汇川
时间:
2012-2-5 11:15
标题:
99乘法表的循环问题出错,请指点
class No1
{
public static void main(String[] args)
{
for(int x=1;x<=9;x++)
{
for(int y=1;y<=x;y++)
{
System.out.print(x+'*'+y+'='+(x*y)+"\t");
}
System.out.println();
}
}
}
但是输出语句中*的''改成""就出现正确答案,为什么呢????????
作者:
马欢
时间:
2012-2-5 11:37
本帖最后由 马欢 于 2012-2-5 11:38 编辑
最好"*"和"="都加" ",因为如果是' ',则是char类型,是单个字符,在ASC码表中都会有对应的数值,而你是想直接输出这两个字符,所以最好用" ",因为字符串不会和运算符产生运算,而有数字对应值的单个字符会被运算符运算,那么就成了运算和不是输出。如果你单个输出不会有问题,但是一起输出就会用到"+"号。会产生数学运算。
作者:
王文龙
时间:
2012-2-5 11:56
' '用单引号修饰的是char类型,
char类型与int类型相加会向上提升类型,
相加成int类型,
就会得不到想要的结果了.
这就与1+"2",与字符串相加得字符串是如出一辙的.
作者:
梅雄新
时间:
2012-2-5 12:30
楼主出现的问题是基本类型数据运算的问题
在基本类型中单引号''赋值的是字符型的变量
双引号""是字符串类型
基本类型数据运算中,不同类型的数据运算都要向上转型
楼主用int类型与char类型运算,char类型会自动转换成int类型,再做运算,
所以楼主的输出(x+'*'+y+'='+(x*y))结果为整型,而非期望的字符串,只是在最后与"\t"运算时才转为字符串,输出结果
作者:
王_涛
时间:
2012-2-5 13:51
错误发生在:System.out.print(x+'*'+y+'='+(x*y)+"\t");
'*'代表的是字符* 在进行+操作时转换成ascii码为42
'='的ascii码是61
这句话的意思是:当循环执行到第一句时,即x=1,y=1;
x+'*'+y+'='+(x*y)为:1+42+1+61+(1*1) 值为106
以此类推...
当吧''改成""时,"*"代表的是字符串,在进行+操作时,执行字符串的连接操作,不执行加法运算。
作者:
衣服
时间:
2012-2-5 14:30
错误原因:如上面的两位说的那样char会被转为int来运算。举个例子 第一次循环的话 输出语句里面的计算表达式为:1+'*'+1+'='+(x*y) * 的十进制ASCII码为42 ,=的ASSCII 十进制码为 61 ,最后运算的表达式就是1+42+1+61+1 和你程序输出的结果是一样。下面我们看下是否是这样的
public class No1
{
public static void main(String[] args)
{
int a='*';
int b='=';
System.out.println("a="+a);
System.out.println("b="+b);
for(int x=1;x<=9;x++)
{
for(int y=1;y<=x;y++)
{
System.out.print(x+'*'+y+'='+(x*y)+"\t");
System.out.print((x+a+y+b+(x*y))+"\t");
}
System.out.println();
}
}
}
作者:
魏腾飞
时间:
2012-2-5 16:06
哈哈,我验证了一把。你的程序挺好的,就是有"*"、'*'和"="、'='的不一样。我把'*'和'='都定义成字符类型然后强制转化成int型输出发现你的程序就是这样将它们都转化成了int行相加了。
class No1
{
public static void main(String[] args)
{
for(int x=1;x<=9;x++)
{
for(int y=1;y<=x;y++)
{
System.out.print(x+'*'+y+'='+(x*y)+"\t");
}
System.out.println();
}
char b='*';
System.out.println((int)b);//b=42
char c='=';
System.out.println((int)c);//c=61
}
}
你看一下吧。
作者:
彭沛东
时间:
2012-2-5 16:11
System.out.print(x+'*'+y+'='+(x*y)+"\t"); 、打印语句中的'是单个字符、在asc码有对应的数值,所以导致打印的结果不对。所以最好是用""代替掉'。
作者:
何洪森
时间:
2012-2-5 16:44
导致输出不是理想结果的语句是:System.out.print(x+'*'+y+'='+(x*y)+"\t");其中'*'和'='与"*"和"="不同,前者是表示char类型,而后者则表示字符串类型。字符'*'对应asc码相应的数值。所以导致了错误。所以只需修改成:System.out.print(x+"*"+y+"="+(x*y)+"\t");即可。
作者:
张青峰
时间:
2012-2-5 17:03
System.out.print(x+'*'+y+'='+(x*y)+"\t"); '*'表示一个字符,楼主实际上想打打印一个*号出来.楼主这样写了后整条语句的意思就变了,变成了:
* 的十进制ASCII码为42 ,=的ASSCII 十进制码为 61 ,最后运算的表达式就是1+42+1+61+1
楼主可以在后面加一条语句:
System.out.println((x+"*"+y+"="+(x*y)+"\t")
这样你就可以对照两种输出结果的异同了.
作者:
许涛
时间:
2012-2-6 02:48
代码中的'*'符号修饰,意味着是char类型,char类型的字符在ASCII码表里有对应的数字,
因而System.out.print(x+'*'+y+'='+(x*y)+"\t");这句代码中x+'*'的加号已经不是连接符的含义,
而是加法符,实际上是int型数据和char型数据在做数据运算;后面的'='也是如此
毕老师讲变量的时候有提到类型转换的问题,楼主还有疑问的话,可以回头看下毕老师的视频:黑马程序员_毕向东_Java基础视频教程第02天-08-类型转换.avi : )
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2