线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:1

时间:2013-08-03 18:05:32

标签: java

我遇到一些异常问题,而我正在编码以获得最小生成树。

错误信息如下: 线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:1     在Assignment.RandomGraph.main(RandomGraph.java:36)

import java.util.*;
public class RandomGraph
{
public static Scanner br = new Scanner(System.in);
static int w [][];//it represents the weight between every two nodes.
static int n;//number of the vertices that you typed.
static int i, j;
static int visited[] = new int[n];
static int next[] = new int[n];
static int d[]=new int[n];



public static void main (String[] args)
{
    System.out.println("Find the shortest edge");
    System.out.println("\nEnter the number of the vertices: ");
    n = br.nextInt();
    w = new int[n][n];
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
        {
            if((i!=j))
            {
            w[i][j] = w[j][i]= 1+(int)(Math.random()*9);
            }
            else if(i == j)
            {
                w[i][j] = w[j][i] = 0;
            }
        }
    for(i=1;i<=n;i++)
    {
        next[i]=visited[i]=0;
        d[i]=32767;
    }
    Graph();
    Prim();
}

static void Graph()
{
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            System.out.print("  "+w[i][j]+"  ");
        }
    System.out.println();
    }
}

static void Prim()
{
    int current=1;
    int total=1;
    int mincost;

    d[current]=0;
    visited[current]=1;
    do{
        for(i=1;i<=n;i++)
        {
            if((w[current][i]!=0)&&(visited[i]==0)&&(w[current][i]<d[i]))
            {
                d[i]=w[current][i];
                next[i]=current;
            }
        }
        mincost = 32767;
        for(i=1;i<=n;i++)
        {
            if((visited[i]==0)&&d[i]<mincost)
            {
                mincost=d[i];
                current=i;
            }
        }
        visited[current]=1;
        total++;
    }while(total!=n);

    mincost=0;
    for(i=1;i<=n;i++)
    {
        mincost=mincost+d[i];
        System.out.print("\n Minimum cost = "+mincost);
        System.out.print("\n Minimum Spanning tree is ");
    }
    for(i=1;i<=n;i++)
    {
        System.out.print("\n"+i+" to "+next[i]);
    }
}

}

3 个答案:

答案 0 :(得分:2)

你的fors中的变量i应该从0变为n,特别是

for(int i=0; i<n; i++)

如果将数组/矩阵声明为array [n],系统将创建一个大小为n的数组,但从0开始,而不是1

,如array[0] = first element NOT array[1]

=&GT;最后一个元素= array[n-1]

答案 1 :(得分:0)

因为你的下一个[]数组的大小为0,你尝试使用索引1获得elemeti。

请阅读:

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

答案 2 :(得分:0)

你有阵列:w [][], visited[], next[], d[]。所有人都有n个元素。您可以使用0 - (n-1)中的索引访问它们。

主方法(最后一个)中的下面循环和static void Prim()内的所有循环都会抛出错误,因为你有i <= n。您正在尝试访问不存在的n index

for(i=1;i<=n;i++) {
    next[i]=visited[i]=0;
    d[i]=32767;
}