首页 > 编程知识 正文

java 局部变量,Java的局部变量

时间:2023-05-05 04:56:43 阅读:201342 作者:3926

关于Java代码变量问题——局部和全局

在说明问题之前,先看一道蓝桥杯的题目:

立方变自身
观察下面的现象,某个数字的立方,按位累加仍然等于自身。
1^3 = 1
8^3 = 512 5+1+2=8
17^3 = 4913 4+9+1+3=17

请你计算包括1,8,17在内,符合这个性质的正整数一共有多少个?

请填写该数字,不要填写任何多余的内容或说明性的文字。

这题对于精通代码算法的大佬是非常简单的题目,只要用到除 / 和除余 % 即可完成运算。下面先看解析和一个错误代码。

解析:首先题目要求立方个个位和与自身相等,这就可以用 / 和 % 来实现,其次就是测试上限为多少的问题。首先我们知道个个位数上最大值为 9 ,那么我们不妨假设一下,100的立方为110^6,也就是说99的立方一定小于99 9999,而99 9999个个位数上和为69=54,很明显99的立方根一定比54要小,也就是说这些符合条件的数有限,而且不超100 。

下面是一个错误的测试代码,附加一错误结果图

public class cs {public static void main(String[] args) {int s=0; //全局变量初始化int n=0;for(int i=0;i<20;i++) {n=i*i*i;System.out.print("n0="+n+";"+"s0="+s+";"); //检测初值0while (n/10!=0) {System.out.print("n1="+n+";"+"s1="+s+";"); //检测运算过程1s=s+n%10;System.out.print("n2="+n+";"+"s2="+s+";"); //检测运算过程2n=n/10;}s=s+n;System.out.println("n3="+n+";"+"s3="+s+";"); //检测结果3}}}

运行结果图:
解释:细心的人一看就知道是怎么一回事,本次错误代码就是因为全局变量和局部变量的关系才造成了 i = 3时,s = 9 而不是等于0 。全局变量虽然初始化了,但时局部变量没有每次初始化,造成了后面每次运算结果都是以上一次基础上更新。

修改后代码如下:

public class Main{public static void main(String[] args) {for(int i=1;i<50;i++) {int n=i*i*i; //局部变量初始化int s=0;while (n/10!=0) {s=s+n%10;n=n/10;}s=s+n;if(s==i) {System.out.println(i); //输出结果}}}}

最后感谢阅读本章,还有感谢大佬a的帮忙测试,下一篇就解说回溯算法的思路——八皇后问题。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。