Java中类里全局变量的在函数里被改变了,为什么输出的是没有被改变的值 5

packageAH4;importjava.util.Scanner;classroad{intweight;}publicclassmazeProblem{static... package AH4;
import java.util.Scanner;

class road
{
int weight;
}
public class mazeProblem
{
static int hardest=0;
static int simplest=9999;
public static int count;
static char[][] book=new char[20][20];
public static void dfs(int x, int y,int sum,road[][] r)
{
int nx,ny;
//搜索顺序为:上 下 右 左
int[][] next= {{1,0},{-1,0},{0,1},{0,-1}};
if(x==r.length-1&&y==r[0].length-1)
{
if(sum>hardest)
hardest=sum;
if(sum<simplest)
simplest=sum;
count=hardest-simplest;//这里修改了全局变量
return;
}
for(int k=0;k<=3;k++)
{
nx=x+next[k][0];
ny=y+next[k][1];
if(nx<0||nx>r.length-1||ny<0||ny<r[0].length-1)
continue;
if(book[x][y]=='\0')
{
sum=sum+r[nx][ny].weight;
book[nx][ny]='*';
dfs(nx,ny,sum,r);
book[nx][ny]='\0';
sum=sum-r[nx][ny].weight;
}
}
return;
}
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int N=sc.nextInt();
road[][] r=new road[N][N];
for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
{
r[i][j]=new road();//对于对象数组里的每一个元素也要进行实例化(因为对象数组里的每一个元素页也相当于一个对象
int x=sc.nextInt();
r[i][j].weight=x;
}
dfs(0,0,1,r);//调用dfs函数
System.out.println(mazeProblem.count);//这里输出仍为0
}
}
展开
 我来答
没有北海ck
2019-05-03 · TA获得超过3976个赞
知道大有可为答主
回答量:6579
采纳率:78%
帮助的人:256万
展开全部
如果全局变量的类型是“public static final”的,那么变量的值是不会被改变的;
如果全局变量的类型是“public static ”的,那么变量的值是可以被随意改变的;
解释:在java中final变量表示的是最终的,也就是在程序初始化加载到内存中,之后不可以被任何对象修改,如果没被定义为final的话,可以重新赋值的。
追问
我的问题是为什么在main调用它时,仍然是最初定义的值,而不是改变后的。
我并没有定义它为final啊?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式