java的局部变量和全局变量

关于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+";");  //检测初值0
			while (n/10!=0) {
				System.out.print("n1="+n+";"+"s1="+s+";");  //检测运算过程1
				s=s+n%10;
				System.out.print("n2="+n+";"+"s2="+s+";");   //检测运算过程2
				n=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的帮忙测试,下一篇就解说回溯算法的思路——八皇后问题。

猜你喜欢

转载自blog.csdn.net/cn89214/article/details/88654596