请问为什么我这个全局变量的值不会变呢?

我在做剑指offer:顺时针打印矩阵,其实不用管我的实现思路,只是不知道为什么定义了一个全局变量start,在printMatrix函数中调用printMatrixInCirckle函数,然后返回printMatrix函数,在 printMatrixInCirckle中start加一等于1 了,但返回 printMatrix函数时,start依然等于0,是为什么呢?
import java.util.ArrayList;
public class Solution {
	int start=0;
    public ArrayList<Integer> printMatrix(int [][] matrix) {
    	int columns=matrix.length;
    	int rows=matrix[0].length;
    	ArrayList<Integer> arrayList=new ArrayList<Integer>();
    	if(matrix==null)
    		return null;
    	if(rows==1){
    		for (int i = 0; i < matrix.length; i++) {
				arrayList.add(matrix[i][0]);
				System.out.println(matrix[i][0]);
			}
    	}else{
    	while(columns>start*2&&rows>start*2){
    		System.out.println("主函数start="+start);//不管循环多少次这里的start都是输出为0,为什么呢????
    		printMatrixInCirckle( matrix,columns,rows,start,arrayList);
    	}
    	}
    	return arrayList;
       
    }
    private void  printMatrixInCirckle(int [][] matrix,int columns,int rows,
    		int start,ArrayList<Integer> arrayList) {
    	int b=start;
    	for(;start==b;start++){//循环一次对start+1,且循环体里没有对start进行操作
    		int i=start,j=start;//i对应column j对应rows
    		for(;j<=rows-start-1;j++){//(start,start)i为其列数,j为其行数
    			arrayList.add(matrix[i][j]);
    			System.out.println(matrix[i][j]);
    		}
    		j--;
    		if(j>start){
    			for(i=start+1;i<=columns-start-1;i++){
    				arrayList.add(matrix[i][j]);
    				System.out.println(matrix[i][j]);
    			}
    		}
    		i--;
    		if(i>start&&j>start){
    			for(j--;j>=start;j--){
    				arrayList.add(matrix[i][j]);
    				System.out.println(matrix[i][j]);
    			}
    		}
    		j++;
    		if(j==start&&i>start){
    			for(i--;i>start;i--){
    				arrayList.add(matrix[i][j]);
    				System.out.println(matrix[i][j]);
    			}
    		}
    	}
    	System.out.println("子函数start="+start);//输出为1,但是printMatrix函数时,start依然等于0 }
}
求助各路大神了#Java工程师##安卓工程师#
全部评论
建议了解下变量作用域和java方法传参(基本数据类型传参为形式参数
点赞 回复 分享
发布于 2016-07-24 10:41
start是把自己复制了一份传进去,不是把自己传进去了
点赞 回复 分享
发布于 2016-07-24 18:44
在java里面,都是按值传参。 对基本数据类型,将该变量复制一份传进去,方法并不改变那个变量。 对对象则是将其引用复制一遍传进去,在方法内通过该引用可以改变对象的域,但是对其引用进行修改是不会影响原对象的。就像将a,b对象的引用复制一遍传进去,在方法内通过a,b的方法可以修改原对象的数据,但是将传进去的引用指向另一对象是不会对原对象造成影响的
点赞 回复 分享
发布于 2016-07-24 18:55
printMatrixInCirckle 你有个局部变量定义叫start 所以函数中优先考虑这个局部变量的值把 就不会改变全局变量的值
点赞 回复 分享
发布于 2016-07-24 19:00

相关推荐

点赞 评论 收藏
分享
03-29 14:19
东北大学 Java
你背过凌晨4点的八股文么:加油同学,人生的容错率很高,只是一个暑期罢了,后面还有很多机会!
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务