2008-04-27
难倒Java高手的五行代码
关键字: 深入java语法
package U4;
public class Pl1 {
public static void main(String[] args) {
int[] array=new int[5];
int k=2;
array[++k]=k=6;
System.out.println("k = "+k);
for(int i=0;i<array.length;i++){
System.out.println(array[i]);
}
}
}
//问题:k最后的值变为多少,数组是哪一位被赋值,且被赋值成多少
下一个问题也是关于“++”的
package U4;
public class Plus {
public static void main(String[] args) {
int c=1;
int a;
c=c++;
a=c;
System.out.println("c = "+c+" a="+a);
}
}
//输出结果是什么?原因
// out: c = 1 a = 1
public class Pl1 {
public static void main(String[] args) {
int[] array=new int[5];
int k=2;
array[++k]=k=6;
System.out.println("k = "+k);
for(int i=0;i<array.length;i++){
System.out.println(array[i]);
}
}
}
//问题:k最后的值变为多少,数组是哪一位被赋值,且被赋值成多少
下一个问题也是关于“++”的
package U4;
public class Plus {
public static void main(String[] args) {
int c=1;
int a;
c=c++;
a=c;
System.out.println("c = "+c+" a="+a);
}
}
//输出结果是什么?原因
// out: c = 1 a = 1
评论
wdlfellow
2008-05-06
真的没有什么意思,相信很多人对这么“基础”的东西都搞不定的,我算一个
学习了
学习了
wdlfellow
2008-05-06
面试有时候还是有这种变态题目的,偶就遇到过
congpeixue
2008-05-05
多测几次逻辑就可以弄明白了。
package slidewindow;
public class Plus {
public static void main(String[] args) {
int c=1;
int a;
//a = c++;
//c = a;
////c=c++;
////c=++c;
////int d = c++;
//a=c;
//System.out.println("c = "+c+" a="+a);
System.out.println(c++);
}
}
package slidewindow;
public class Plus {
public static void main(String[] args) {
int c=1;
int a;
//a = c++;
//c = a;
////c=c++;
////c=++c;
////int d = c++;
//a=c;
//System.out.println("c = "+c+" a="+a);
System.out.println(c++);
}
}
rocwon
2008-05-04
第2个题目,怎么看都觉得有语意问题。
zwm512327
2008-04-30
我觉的好多人根本没明白我的意思。
所谓“难倒高手”,本来就包含高手不写这样代码的意思。并非是讲会这个是高手,不会是低手,绝无此意。
另一个角度讲,什么高手写人看懂的代码,低手写机器看懂的代码没什么根据。高手的概念很难定义。所谓写代码不论容易懂还是难懂,与高手无关吧。现在的软件开发设计更加重要,写代码的基本不算什么技术,也显不出水平之高下。另一点想不同,前面那位朋友为什么非要把程序员跟高手分开呢。程序员就不能是高手。难懂你们项目经理还每天亲自写代码。
当时写这几行代码是因为我被人问到了,想不明白。然后贴出来讨论下。从某种角度讲,这么偏的题目,高手不会也是有可能的,所谓“难道高手”应不为过吧。
所谓“难倒高手”,本来就包含高手不写这样代码的意思。并非是讲会这个是高手,不会是低手,绝无此意。
另一个角度讲,什么高手写人看懂的代码,低手写机器看懂的代码没什么根据。高手的概念很难定义。所谓写代码不论容易懂还是难懂,与高手无关吧。现在的软件开发设计更加重要,写代码的基本不算什么技术,也显不出水平之高下。另一点想不同,前面那位朋友为什么非要把程序员跟高手分开呢。程序员就不能是高手。难懂你们项目经理还每天亲自写代码。
当时写这几行代码是因为我被人问到了,想不明白。然后贴出来讨论下。从某种角度讲,这么偏的题目,高手不会也是有可能的,所谓“难道高手”应不为过吧。
weidewei
2008-04-30
是高手就不会写这样的代码.程序员才会. 呵呵~~
icefire
2008-04-30
自虐!
所有教科书都说了,不要没事闲着去猜运算优先级,老实用“()”,程序不会出错,别人也能看得懂!!!!!!!
所有教科书都说了,不要没事闲着去猜运算优先级,老实用“()”,程序不会出错,别人也能看得懂!!!!!!!
oaklet
2008-04-28
搞得这点有意义?
没有实用价值,用来做考试题可能用得着?
没有实用价值,用来做考试题可能用得着?
zwm512327
2008-04-27
第一个程序其实是说明一个规则。运算是从左到右,而赋值则是从右到左。
k=2;
array[++k]=k=6;
下面运算的时候++c先运算,然后array[3]=k,但是要注意的是此时并不是把array[3]的值赋值成3(虽然k此时确实等于3),赋值一定会从右值开始。结果才会得到array[3]=6,而不是array数组越位,或者array[3]=3等情况。
第二个程序上面有个朋友说
“变量a很显然是和变量c的值同步的;表达式“c=c++; a=c”我是这样理解的:
将两个表达式完全可写作一个: a=c++;”
如果是这么个问题的话也就不算问题了。试试的话,会发现"c=c++;a=c"最后a和c的值打出来是1,而a=c++打出来的是a=1,c=2。
解释应该是这样的,一个同事想的,我觉的是比较哟道理的。
c=c++运行的先是 c++(根据优先级) 这个表达式会出两个结果。一个是表达式的值为1,另一个是c的值,被自加为2.然后左边那个“c=”的是表达式的值,正好又把c变成2的那个值给覆盖成1了。
k=2;
array[++k]=k=6;
下面运算的时候++c先运算,然后array[3]=k,但是要注意的是此时并不是把array[3]的值赋值成3(虽然k此时确实等于3),赋值一定会从右值开始。结果才会得到array[3]=6,而不是array数组越位,或者array[3]=3等情况。
第二个程序上面有个朋友说
“变量a很显然是和变量c的值同步的;表达式“c=c++; a=c”我是这样理解的:
将两个表达式完全可写作一个: a=c++;”
如果是这么个问题的话也就不算问题了。试试的话,会发现"c=c++;a=c"最后a和c的值打出来是1,而a=c++打出来的是a=1,c=2。
解释应该是这样的,一个同事想的,我觉的是比较哟道理的。
c=c++运行的先是 c++(根据优先级) 这个表达式会出两个结果。一个是表达式的值为1,另一个是c的值,被自加为2.然后左边那个“c=”的是表达式的值,正好又把c变成2的那个值给覆盖成1了。
elf8848
2008-04-27
刚才发的答案,是运行后才得出的, 要不, 我也想不出来, 没用过a=k=6;这样的方法.
前面有位哥们,说的好"而高手能写出人能看懂的代码".
前面有位哥们,说的好"而高手能写出人能看懂的代码".
elf8848
2008-04-27
k = 6
0
0
0
6
0
0
0
0
6
0
lovme
2008-04-27
int[] array=new int[5];
int k=2;
array[++k]=k=6;
System.out.println("k = "+k);
for(int i=0;i<array.length;i++){
System.out.println(array[i]);
对上面的这段代码,变量的value变化是显然的。
1:k被赋值为2
2:k自增了自身,变为3
3:k被赋值为6,同时array【3】也被赋值为k的值(6)
4:打印k的值为6
5:循环打印array的各个值
0
0
0
6
0
int c=1;
int a;
c=c++;
a=c;
System.out.println("c = "+c+" a="+a);
对上面的这段代码,变量a很显然是和变量c的值同步的;表达式“c=c++; a=c”我是这样理解的:
将两个表达式完全可写作一个: a=c++;
这样就很容易理解啦。
为什么可以写成这样呢?我猜想:javac在编译时,进行了取代常量或别的什么方面的优化处理,所以可合并写成我理解的那样(a=c++)。不知这样理解对不对!
想对上面的两种表达方式发表一点看法:
如果是我所猜想的那样(被编译器优化)的话,我认为这是对java语言使用者的
一种误导,因为按常规的使用方式来使用,结果是错误的。
如果不是我所猜想的那样,我认为这种语法现象很隐晦,就像c++中的 "**p"指针一样。
期待有不同的解释方法
int k=2;
array[++k]=k=6;
System.out.println("k = "+k);
for(int i=0;i<array.length;i++){
System.out.println(array[i]);
对上面的这段代码,变量的value变化是显然的。
1:k被赋值为2
2:k自增了自身,变为3
3:k被赋值为6,同时array【3】也被赋值为k的值(6)
4:打印k的值为6
5:循环打印array的各个值
0
0
0
6
0
int c=1;
int a;
c=c++;
a=c;
System.out.println("c = "+c+" a="+a);
对上面的这段代码,变量a很显然是和变量c的值同步的;表达式“c=c++; a=c”我是这样理解的:
将两个表达式完全可写作一个: a=c++;
这样就很容易理解啦。
为什么可以写成这样呢?我猜想:javac在编译时,进行了取代常量或别的什么方面的优化处理,所以可合并写成我理解的那样(a=c++)。不知这样理解对不对!
想对上面的两种表达方式发表一点看法:
如果是我所猜想的那样(被编译器优化)的话,我认为这是对java语言使用者的
一种误导,因为按常规的使用方式来使用,结果是错误的。
如果不是我所猜想的那样,我认为这种语法现象很隐晦,就像c++中的 "**p"指针一样。
期待有不同的解释方法
pf_miles
2008-04-27
是个程序员都能写出机器能懂的代码;
而高手能写出人能看懂的代码。
而高手能写出人能看懂的代码。







评论排行榜