首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在两个相同数组上返回false的Arrays.deepEquals

在两个相同数组上返回false的Arrays.deepEquals
EN

Stack Overflow用户
提问于 2017-11-15 22:27:35
回答 1查看 85关注 0票数 1

我有一个代码

代码语言:javascript
复制
import java.util.*;
import java.io.*;

public class Dijkstra {

        public static int [][] Dijkstra_alg( int n, int e, int mat[][], int s)
        {
            s=s-1;
            int adj[][]=new int[n][n];
            for(int i=0;i<e;i++)
            {
                adj[mat[i][0]-1][mat[i][1]-1]=mat[i][2];
            }
            // for(int i=0;i<n;i++)
            // {
            //     for(int j=0;j<n;j++)
            //     {
            //         System.out.print(adj[i][j]+"\t\t");
            //     }
            //     System.out.println();
            // }
            int dist[][] = new int[n][n]; //dist[][1] holds USP value

            Boolean visited[] = new Boolean[n];


            for (int i = 0; i < n; i++)
            {
                dist[i][0] = Integer.MAX_VALUE;
                visited[i] = false;
                dist[i][1]=1;
            }


            dist[s][0] = 0;

            for (int i = 0; i < n-1; i++)
            {
                int min = Integer.MAX_VALUE;
                int u=-1;
                for (int v = 0; v < n; v++)
                if (visited[v] == false && dist[v][0] <= min)
                {
                    min = dist[v][0];
                    u = v;
                }

                visited[u] = true;

                //relax
                for (int v = 0; v < n; v++)
                {
                    if (!visited[v] && adj[u][v]!=0 && dist[u][0] != Integer.MAX_VALUE &&dist[u][0]+adj[u][v] < dist[v][0])
                    {
                        dist[v][0] = dist[u][0] + adj[u][v];
                        dist[v][1]=1;
                    }
                    else if(!visited[v] && adj[u][v]!=0 && dist[u][0] != Integer.MAX_VALUE &&dist[u][0]+adj[u][v] == dist[v][0])
                        dist[v][1]=0;
                }
            }
            return dist;


        }

        public static void main(String args[])
        {
            int[][] Mat = {  {1, 2, 9}, {1, 3, 6}, {1, 4, 5}, {1, 5, 3}, {3, 2, 2}, {3, 4, 4}  };
            int N = 5;
            int E = 6;
            int S = 1;
            int [][] ans = {{0, 1}, {8, 1}, {6, 1}, {5, 1}, {3, 1}};
            int [][] dist=Dijkstra_alg(N,E,Mat,S);
            System.out.println(dist.length);
            System.out.println(ans.length);
            for (int i = 0; i < N; i++)
            {
                System.out.println(dist[i][0]+"\t\t"+dist[i][1]);
                System.out.println(ans[i][0]+"\t\t"+ans[i][1]);
            }
            System.out.println((Arrays.deepEquals(dist,ans)));
        }

}

dist和ans打印的结果完全相同,但即便如此,Arrays.deepEquals仍然返回false。不知道为什么会显示假

这两个数组都是相同的,但是结果是假的。

输出结果如下:

代码语言:javascript
复制
5
5
0               1
0               1
8               1
8               1
6               1
6               1
5               1
5               1
3               1
3               1
false

正如您所看到的,输出是完全相同的,不应该出现这样的错误,但它仍然存在。不知道为什么会发生这种事。

有人知道怎么解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-15 22:31:24

代码语言:javascript
复制
int dist[][] = new int[n][n];

dist的第二维是n,而ans的第二维是2。

把它改成

代码语言:javascript
复制
int dist[][] = new int[n][2];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47318392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档