您所在的位置:Seago-Microsoft Windows>>Windows管理脚本>> 自学java时遇到的几个小问题

自学java时遇到的几个小问题

作者:管理员 来源:新浪爱问 日期:2008-04-10 

先看这段小程序
class Question1{
public static void main(String[]args){
byte a=1000; //x1
long b=123456789012345789; //x2
System.out.println(a);
System.out.println(b);
}
}
这段程序在编译时,java首先指出变量b有问题,而不是a,在b后加上L,继续编译,java才指出a有问题;难道不是先执行语句x1,在执行x2吗?
下面这是关于构造函数的问题:
public class Question2{
int a;
Question2(){
a=10;
System.out.println("hello");
}
public static void main(String[]args){
Question2 ob=new Question2();
System.out.println(ob.a);
}
}
这段程序编译执行后会输出"hello"和"10",ob不是只引用了a吗?为什么连hello也输出了呢?
接下来的这个问题是关于for循环的:
class Question3{
public static void main(String[]args){
for(int a=1;a<=3; a ){ //x1
for(int b=1; b<=a; b ){ //x2
System.out.println('*'); //x3
}
System.out.println(); //x4
}
}
}
这段程序按照书本的说法应输出如下:
*
* *
* * *
但实际结果并非如此,而是
*

*
*

*
*
*
先不管输出结果,在两个for循环中:当a=1时,b=1,那么打印出一个‘*’,但当b自加1时,b<=a为false,这是执行x4后,a=2,b=1,接下来不应还输出一个'*'么?为什么是两个呢?
另外,a,b的值与*号有什么关系?为什么它们的值增加时,*的数目也跟着增加?怎样才能得出像书本所说的那种结果?
And one more question:
class Question4{
public static void main(String[]args){
int x=1;
for(int i=1;i<=10;i ){
while(x<50){
x =1;
if(i*x >40)break;
System.out.println(i*x " ");
}
}
}
}
这段程序的输出结果如下:
3 6 9 12 15 18 21 24 27 30 33 36 39
第一个结果是3这应没问题,第二次循环时x的值为3,i*x 无论是i乘x后再自加1,还是x自加1再与i相乘,这是的值都应为4,为什么会是6呢?
请各位高手多多指教,这里先谢过了。
电脑问题网给出的最佳答案 楼主的第一个问题我不知道怎么解释

第二个问题,Question2 ob=new Question2();当执行这一语句是,就同时执行了构造函数的方法体,所以会有“hello”的输出。

第三个问题,System.out.println('*'); //x3 ,问题就出在这条语句上,System.out.println()该语句为输出并换行,也就是输出括号里的内容的同时会换行,再次输出是就在下一行了,要想和书本中解释的一样就要换成这样了System.out.print(),这样为输出但不换行,区别就在最后的println和print,在说说你的循环,当a=2时,b从1开始,内层循环循环一次,b增加1变成2,这是b<=a还是成立的,所以内层循环在执行一次,b再增加1变成3,这是b<=a不再成立,转入外层循环,这样内层循环执行了两次,所以当a=2时会输出两个“*”。

第四个问题,while循环的循环体语句里面有x =1,if(i*x ),System.out.println(i*x " "); 这三条语句,当输出第一个数后,最后输出语句中的X 才执行一次,这是x变成了4,判断while的循环条件成立,执行x =1,这是x就变成了5,在执行if条件语句时,里面还有一个x ,这是x就变成了6,但是这时的内层循环还没有结束,也就是i的值还是1,所以输出的第二个数就是6了,后面输出的输都是这个道理,每输出一个数字都比前一个数字增加3

不知道这样解释楼主能不能明白,不好意思,由于本人学的时间也不长,第一个问题是在不知道该怎么解释。

其他回答   第一个问题的运行结果是:
未加L时:

Question.java:5: 过大的整数: 123456789012345789
long b=123456789012345789; //x2
^
1 错误

加上L后:

Question.java:4: 可能损失精度
找到: int
需要: byte
byte a=1000; //x1
^
1 错误
为什么会出现这种情况呢?
解释如下:
1.如果定义long类整数,分配给变量的值特别大,需要在该值后加缀L,小写l也可以,但为混淆了数字1,还是多使用大写!
2.编程时必须确保变量的初始值在相应类型值的范围之内,否则就会报错!byte(字节型),这种变量的存储值范围是:-128到 127,所占的内存空间为1字节即8位二进制数,你却byte=1000;原因清楚了吧