A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我为你着迷 金牌黑马   /  2014-3-6 21:08  /  1468 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int n=3,m=8;
int temp;
temp=n;
n=m;
m=temp;
问题是为什么最后打印的结果是m=3,n=8呢   想不通
另外一个问题代码int temp;怎么可以执行呢  代码能这么写吗  我觉得是挂的呀 ,根本就不是一个完整的语句呀 很疑惑
求大侠帮忙解决下  谢谢了

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 明显看毕老师的时候走神了

查看全部评分

12 个回复

倒序浏览
这不就是交换两个数吗?temp只是一个中间变量
回复 使用道具 举报
这段代码的含义是交换n和m的变量值,int temp;是定义一个叫temp的与n、m类型相同的变量,只不过是没有初始化,它用来临时存储数值的,
初始化就是把变量赋为默认值,在汇编语言中,为变量分配空间时,初始化过的变量的初值位于可执行文件代码段数据后,会占用一定空间,不必要的初始化会造成磁盘空间的浪费。在C语言等高级语言中,为每一个变量赋初值被视为良好的编程习惯,有助于减少出现Bugs的可能性。因此,是否对不必要的变量初始化依情况而定。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
java中,若在变量声明的时候没有赋予初始值,则会给该变量默认值
int默认值对应----o
long-----0L
float-----0.0f
double-----0.0d
建议楼主再去复习java的基础知识,你可能漏掉了{:3_58:}

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 何建明 于 2014-3-6 22:23 编辑

1、n 的值先放到 temp 里 : n---> temp
2、把m值 给n   : m---->n
3、把temp 里存的 n 值给 m ,相当于 刚开始的 n值给 m: n---->m
完成了 n 和 m值的交换。
----------
相当于 有两缸水 ,你想把 这两缸水 互换, 就得先拿第三个 空的缸,
先把第一缸放到第三个缸里, 再把第二个缸的水倒进第一缸,
最后把第三缸倒回第二缸! :D   生动吧。。。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报 2 0
你可以跟各个量写入内存的顺序,n开了一块内存里面存个3,m开了一块里面存了个8,int定义了一个变量temp再开了一块内存,此时还没有存数据。然后就是把n的值给了temp,m的值到n把原值覆盖,之后temp把值传给m,覆盖了其原值。再配合楼上鱼缸的例子,应该明白了吧。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 nicholyx 于 2014-3-6 23:18 编辑
centian2005 发表于 2014-3-6 22:13
java中,若在变量声明的时候没有赋予初始值,则会给该变量默认值
int默认值对应----o
long-----0L

补充一点,成员变量声明的时候没有初始化会有默认值,但是局部变量必须先赋值后才能进行运算

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 枫露 于 2014-3-6 23:41 编辑

  1.    int n=3,m=8;           //定义int类型的n、m初始值n=3、m=8
  2.    int temp;                 //定义int类型的temp 没有初始化</P>
  3.    temp=n;                  //在java里面都是从后往前赋值  temp=n 等于把n的值给temp temp=3
  4.    n=m;                    // n=m 等于把m的值赋予n n=8
  5.    m=temp;                //m=temp 从上面的步骤可知temp=3 ,等于是把temp的值赋给m m=3
复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
其实这个我也是一开始和你一样的困惑啊!听老师讲了好几遍
int n=3,m=8;   //这是声明 变量n,m 并且赋值 n=3,m=8
int temp;         //这步是 声明一个变量 temp  但是没有赋值
temp=n;         //这步是  把n的值赋给了temp ,就相当于 temp = 3;因为java都是从右往左赋值;
n=m;           //这步是  把m的值赋给了n ,就相当于 m = 8;
m=temp;       // 上面 已经是 temp= 3 了对吧,这步就是 把temp的值赋给了m,所以 m = 3;
其实temp就是  临时的一个容器,帮助转换了一下,如果你还不明白就这样记住,只要是两个变量数值交换就是这样写,写的时候 首尾连着写,你看
从int  temp开始
第一行结尾是temp,第二行的开始就是temp;
第二行的结尾是n,第三行的开始就是n;
。。。。以此类推,最后结尾还是temp因为是从temp开始的所以还是它收尾;(这是老师告诉我的窍门,用多了就明白了)

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
何建明 发表于 2014-3-6 22:21
1、n 的值先放到 temp 里 : n---> temp
2、把m值 给n   : m---->n
3、把temp 里存的 n 值给 m ,相当于  ...

生动啊 亲 3Q
回复 使用道具 举报
My_work 发表于 2014-3-6 22:06
这段代码的含义是交换n和m的变量值,int temp;是定义一个叫temp的与n、m类型相同的变量,只不过是没有初始 ...

哇  哥  你好强啊  
回复 使用道具 举报
漠然~回首℃ 发表于 2014-3-6 23:52
其实这个我也是一开始和你一样的困惑啊!听老师讲了好几遍
int n=3,m=8;   //这是声明 变量n,m 并且赋值 n= ...

谢谢啊  很感动
回复 使用道具 举报
前面各位大神都已经解决了,int temp只是毕老师定义的一个整型变量,你也可以变成int a,int b,都随意的。毕老师画得图很精确,就是先弄一个temp出来,然后把N的值放倒temp里面,然后把M的值放倒N里面, 最后把temp放到M里面,这个小程序的意思就是把M和N的值交换一下, 建议你回看一下毕老师的视频,我也是初学者正在看毕老师的视频。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马