`
zwm512327
  • 浏览: 56684 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

难倒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
0
9
分享到:
评论
13 楼 wdlfellow 2008-05-06  

真的没有什么意思,相信很多人对这么“基础”的东西都搞不定的,我算一个

学习了
12 楼 wdlfellow 2008-05-06  
面试有时候还是有这种变态题目的,偶就遇到过
11 楼 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++);
}
}
10 楼 rocwon 2008-05-04  
第2个题目,怎么看都觉得有语意问题。
9 楼 zwm512327 2008-04-30  
    我觉的好多人根本没明白我的意思。
     所谓“难倒高手”,本来就包含高手不写这样代码的意思。并非是讲会这个是高手,不会是低手,绝无此意。
     另一个角度讲,什么高手写人看懂的代码,低手写机器看懂的代码没什么根据。高手的概念很难定义。所谓写代码不论容易懂还是难懂,与高手无关吧。现在的软件开发设计更加重要,写代码的基本不算什么技术,也显不出水平之高下。另一点想不同,前面那位朋友为什么非要把程序员跟高手分开呢。程序员就不能是高手。难懂你们项目经理还每天亲自写代码。
    当时写这几行代码是因为我被人问到了,想不明白。然后贴出来讨论下。从某种角度讲,这么偏的题目,高手不会也是有可能的,所谓“难道高手”应不为过吧。
8 楼 weidewei 2008-04-30  
是高手就不会写这样的代码.程序员才会.  呵呵~~
7 楼 icefire 2008-04-30  
自虐!
所有教科书都说了,不要没事闲着去猜运算优先级,老实用“()”,程序不会出错,别人也能看得懂!!!!!!!
6 楼 oaklet 2008-04-28  
搞得这点有意义?
没有实用价值,用来做考试题可能用得着?
5 楼 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了。
4 楼 elf8848 2008-04-27  
刚才发的答案,是运行后才得出的, 要不, 我也想不出来, 没用过a=k=6;这样的方法.

前面有位哥们,说的好"而高手能写出人能看懂的代码".
3 楼 elf8848 2008-04-27  
k = 6
0
0
0
6
0
2 楼 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"指针一样。

期待有不同的解释方法
1 楼 pf_miles 2008-04-27  
是个程序员都能写出机器能懂的代码;
而高手能写出人能看懂的代码。

相关推荐

    java倒计时源代码

    Java倒计时源代码是一种基于Java编程语言实现的简单应用程序,用于显示从特定时间开始的倒计时。这个程序特别适合那些需要定时提醒或者计时功能的场景,比如考试倒计时、活动倒计时等。它包含了源代码文件以及打包好...

    Java2Pas Java代码转pas代码

    Java2Pas是一个实用工具,主要用于将Java编程语言编写的源代码转换为Pascal语言的等效代码。这个工具对于那些需要在两种语言之间迁移代码或者理解不同编程语言语法的开发者来说非常有价值。Java和Pascal虽然都是面向...

    7个Java小游戏源代码

    7个Java小游戏源代码 解压密码是:yykings

    JAVA提高反射效率,Java代码精粹,高手实现,反射高效代码

    JAVA提高反射效率,Java代码精粹,高手实现,反射高效代码

    Java高手真经(编程基础卷)光盘全部源码 免积分

    javaexception.zip 07.Java面向对象编程扩展(计算器异常捕捉实例) 第3部分(5个程序包) javaio.zip 09.Java输入/输出流 javavi.zip 09.Java输入/输出流上机作业参考(文本编辑器) javathread.zip 10.Java多...

    很强大的java代码混淆工具 Jocky

    Jockey跟其他混淆工具不同的是:它是直接对编译过程做文章,也就是在把java文件编译为class文件的过程中对代码进行混淆,混淆后的代码中包含很多JVM 指令,大家知道JVM指令是面向机器的,人类一般很难看懂!...

    基于java的p2p文件传输代码.rar

    基于java的p2p文件传输代码.rar基于java的p2p文件传输代码.rar基于java的p2p文件传输代码.rar基于java的p2p文件传输代码.rar基于java的p2p文件传输代码.rar基于java的p2p文件传输代码.rar基于java的p2p文件传输代码....

    java人脸识别源代码

    本资源"java人脸识别源代码"是针对Java编程语言实现的人脸识别系统的源代码,旨在帮助开发者理解和应用这项技术。下面我们将深入探讨相关知识点。 首先,人脸识别通常包括预处理、特征提取、匹配等核心步骤。预处理...

    大鱼吃小鱼JAVA版本源代码

    "大鱼吃小鱼"是一款经典的休闲游戏,其JAVA版本的源代码为我们提供了一个学习和研究JAVA编程在游戏开发中的应用的机会。以下是对这个项目的一些关键知识点的详细解析: 1. **JAVA编程语言**:本项目是用JAVA语言...

    java代码生成数字证书

    Java代码生成数字证书涉及到几个关键概念和技术,包括Java的密钥和证书管理、RSA加密算法以及非交互式证书创建。在此,我们将深入探讨这些主题,以便理解如何在Java环境中生成和使用数字证书。 1. **数字证书**:...

    java转js工具

    Java到JavaScript转换工具有助于开发者将已有的Java代码库移植到JavaScript环境中,这在Web开发中尤其有用,因为JavaScript是浏览器端的主要脚本语言。这样的工具能够帮助开发者利用Java的强大功能来构建前端应用,...

    C#代码转java代码工具

    一个很强大的工具, 能将c#代码片段、文件甚至工程直接转换成java代码,并能彻底解决外部引用的DLL问题,最强的是支持c#工程的直接转换,生成的Java代码质量也很不错。软件已破解,去除了未注册版最多只能转换1000行的...

    Java天气预报查询代码(完整项目)

    这是本人写的一个基于Java天气预报查询的Java项目,查询的URL为:http://m.weather.com.cn/data/cityId.html/,其中cityId为城市Id,可以在网上查询到。...本人保证代码质量,请放心下载,谢谢支持!

    Java五子棋游戏源代码

    3. **胜负判定**:不仅检查每行每列,还会检查斜向是否有连续五子,但由于代码片段不完整,这部分逻辑并未完全展示。 ### 总结 通过分析这份Java五子棋游戏源代码,我们可以看到Java语言在图形界面设计和游戏逻辑...

    JAVA爬虫项目源代码

    【JAVA爬虫项目源代码】是一个使用JAVA编程语言编写的爬虫项目,它结合了多线程编程和队列管理技术来提升数据抓取的效率和并发性。在这个项目中,开发者利用了以下核心技术: 1. **HttpClinet**:HttpClinet是Java...

    经典的java小程序源代码合集

    这个“经典的java小程序源代码合集”包含了164个精心设计的程序示例,涵盖了各种类型的小游戏和实用工具,如五子棋、俄罗斯方块、扫雷以及聊天程序。这些程序是学习Java编程语言及其应用的宝贵资源,不仅能让初学者...

    java web网上书店代码

    【Java Web网上书店代码】项目是一个综合性的应用,它展示了如何使用Java技术栈来构建一个完整的Web应用程序,特别是在电子商务领域中的在线书店系统。这个项目涵盖了众多的Java Web开发知识点,包括但不限于Servlet...

    Java开发技术大全(500个源代码).

    getLinePara.java 获取命令行参数示例 hasStaticMethod.java 静态成员方法示例 hasStatMember.java 静态成员变量示例 HelloNative.c 用C写的一个小程序 HelloNative.dll 用C生成的DLL文件 HelloNative.exp 用...

    java俄罗斯方块源代码

    "Java俄罗斯方块源代码"是一个适合新手学习的项目,它将帮助初学者理解基础的编程概念,特别是针对游戏开发的逻辑和算法。下面,我们将深入探讨这个项目中的关键知识点。 1. **Java基础知识**: - **类与对象**:...

Global site tag (gtag.js) - Google Analytics