Criss Angel 2023-08-13 17:44 采纳率: 0%
浏览 6

java 修改一个静态内部类实例的参数,另一个也被修改了

定义了一个静态内部类,创建了两个实例,然后修改其中一个实例的变量时,不知道为什么另一个的变量也被修改了

写的是洛谷的p1746离开中山路
https://www.luogu.com.cn/problem/P1746
发现在赋值操作后temp的hashcode会变的和t的一样

谢谢各位


package prac;


import java.util.Scanner;



public class bfs_1 {
    
    //col表示该节点在哪列 line表示在哪行
    static class nod{
        int col;
        int line;
    }
    
    public static int n,x1,x2,y1,y2;//对应题目的各变量
    public static int [][]map=new int[10001][10001];//记录地图
    public static int [][]distance=new int[1001][1001];//记录每个节点花费的距离,bfs
    public static nod[]queue=new nod[1000];//手动实现bfs使用的队列,下面的是头尾
    public static int rear=0,front=0;
    public static int[] dx=new int[]{0,1,-1,0};//方向数组
    public static int[] dy=new int[]{1,0,0,-1};
    
    public static int to_int(char c) {//输入处理
        return (int)(c-'0');
        
    }
    
    public static int bfs(int x,int y) {
        bfs_1.nod temp=new bfs_1.nod();
        bfs_1.nod t= new bfs_1.nod();
        temp.col=x;
        temp.line=y;        
        queue[rear++]= temp;
        int a,b,dis=0;
        distance[y1][x1]=0;
        while(rear!=front) {
            temp=queue[front++];
            dis=distance[temp.line][temp.col];
            for(int i=0;i<4;i++) {
                a=temp.col+dx[i];
                b=temp.line+dy[i];
                if(a<1||a>n||b<1||b>n||map[b][a]!=0||distance[b][a]>=0) {
                    continue;
                }
                //在下面这个赋值操作之后,temp就自动改变hashcode,和t的hashcode就一样了
                t.line=b;
                t.col=a;
                queue[rear++]= t;
                distance[b][a]=dis+1;
        }
        }
        return distance[y2][x2];
        
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        Scanner scanner = new Scanner(System.in);
        n=scanner.nextInt();
        String tempString;
        for(int i=1;i<=n;i++) {
            tempString=scanner.next();
            for(int j=1;j<=n;j++) {
                map[i][j]=to_int(tempString.charAt(j-1));
                distance[i][j]=-1;//先将距离都赋值-1
            }
        }
        x1=scanner.nextInt();
        y1=scanner.nextInt();
        x2=scanner.nextInt();
        y2=scanner.nextInt();
        System.out.println(bfs(x1, y1));
    }

}


  • 写回答

4条回答 默认 最新

  • P2441M 2023-08-13 18:04
    关注

    静态类为什么可以创建实例……还是要看一下代码。

    评论

报告相同问题?

问题事件

  • 修改了问题 8月14日
  • 修改了问题 8月13日
  • 修改了问题 8月13日
  • 创建了问题 8月13日

悬赏问题

  • ¥15 lvgl v8.2定时器提前到来
  • ¥15 qtcp 发送数据时偶尔会遇到发送数据失败?用的MSVC编译器(标签-qt|关键词-tcp)
  • ¥15 cam_lidar_calibration报错
  • ¥15 拓扑学,凸集,紧集。。
  • ¥15 如何扩大AIS数据容量
  • ¥15 单纯型python实现编译报错
  • ¥15 c++2013读写oracle
  • ¥15 c++ gmssl sm2验签demo
  • ¥15 关于模的完全剩余系(关键词-数学方法)
  • ¥15 有没有人懂这个博图程序怎么写,还要跟SFB连接,真的不会,求帮助