Chamada de função em condição de if dando problema

4 respostas
D

E aí pessoal blz?

Eu estou pelejando em um erro que está dando no meu programa ao chamar o método grau dentro do caminho de euler.Está indicando no código abaixo.

import javax.swing.*;
public class Grafo
{
	public int numVertices;
	public Integer matAdj[][];
	public int visitado[];
	public Grafo(int nv)
	{
		numVertices=nv;
		matAdj=new Integer[nv][nv];
		visitado=new int[nv];
	}
	public void addAresta (int vi, int vj, int peso)
	{
		matAdj[vi][vj]=peso;
		matAdj[vj][vi]=peso;
	}
	public void remAresta(int vi, int vj)
	{
		matAdj[vi][vj]=null;
		matAdj[vj][vi]=null;
	}
	public void imprimePares()
	{
		int i,j;
		String resp="E={";
		for(i=0;i<numVertices;i++)
		{
			for(j=0;j<numVertices;j++)
			{
				if(matAdj[i][j]!=null)
				{
					resp+="("+i+","+j+")";
				}
			}
		}
		resp+="}";
		JOptionPane.showMessageDialog(null,resp,"Pares", JOptionPane.PLAIN_MESSAGE);
	}
	public int grau (int v)
	{
		int i, cont=0;
		for(i=0;i<numVertices;i++)
		{
			if(matAdj[v][i]!=null)
				cont++;
		}
		return cont;
	}
	public void imprimeMatAdj()
	{
		JTable table;
		JScrollPane saida;
		String nomes[] = new String[numVertices];
		for(char i='A';i<'A'+numVertices;i++)
		    nomes[i-'A']=String.valueOf(i);
		table=new JTable(matAdj,nomes);
		saida=new JScrollPane(table);
		JOptionPane.showMessageDialog(null,saida,"Matriz", JOptionPane.PLAIN_MESSAGE);
	}
	public void profundidade(int v)
	{
		int i;
		for(i=0;i<numVertices;i++)
		   visitado[i]=0;
		prof(v);
	}
	public void prof(int v)
	{
		int i;
  		visitado[v]=1;
                System.out.println(v);
		for(i=0;i<numVertices;i++)
		{
			if(matAdj[v][i]!=null && visitado[i]==0)
                            prof(i);
		}
  	}
	public boolean caminhoEuler()
	{
		int cont=0,i,j,temp;
		for(i=0;i<=numVertices;i++)
		{
--------->	     if(grau(i)%2!=0)    <----------aqui
			   cont++;
		}
		return (cont<=2);
	}
	public void amplitude(int v)
	{
                String amplitude="";
		Fila f = new Fila();
		int i,nodo;
		for(i=0;i<numVertices;i++)
		    visitado[i]=0;
		f.enfileirar(v);
		visitado[v]=1;
		while(f.vazia()==false)
		{
			nodo=f.desenfileirar();
			for(i=0;i<numVertices;i++)
			{
				if(matAdj[nodo][i]!=null && visitado[i]==0)
				{
					amplitude+=i+",";
        				visitado[i]=1;//marca como visitado
					f.enfileirar(i);
				}
			}
		}
                JOptionPane.showMessageDialog(null,amplitude,"Passeio Amplitude", JOptionPane.PLAIN_MESSAGE);
	
	}
	
}

Num entendi o porquê do erro se eu estou retornando um valor na função grau!!

Vou agradecendo desde já.

4 Respostas

Jaison

Olá danimac13, realmente tá estranho, num cheguei a analisar o código todo mas eu coloquei os dois métodos aqui (NetBeans) e não apresentou erro!, mas teria q analisar o código inteiro

Tá estranho esse erro, vc poderia postar o erro?

abraços!!!

C

Tire o “=” do for da função caminhoEuler… Ficando assim:

for (i = 0; i < numVertices; i++)

Acontece que quando você instância o construtor Grafo(num) você define que a matriz “matAdj” terá “num” linhas e “num” colunas, ou seja, sua matriz irá de [0] até [num - 1], tanto para linhas, quanto para colunas… E na sua função atual, que está acontecendo o erro, você está indo além do tamanho da matriz, ou seja, está querendo ler a linha [num] da matriz, quando o maior que você consegue ler é [num - 1], gerando assim a exceção…

[]'s

FlwZ!

Jaison

Ch4v3s:
Tire o “=” do for da função caminhoEuler… Ficando assim:

for (i = 0; i < numVertices; i++)

Acontece que quando você instância o construtor Grafo(num) você define que a matriz “matAdj” terá “num” linhas e “num” colunas… E na sua função atual, que está gerando o erro, você está indo além do tamanho da matriz, ou seja, está querendo ler a linha “num + 1” da matriz, gerando assim a exceção…

[]'s

FlwZ!

Bem observado ch4v3s!!! ele não postou que era erro de exceção, dae passei em branco :smiley:

D

Muito obrigado.
Consegui aqui.
Desculpe a demora na resposta, é que esse velox é uma *******************************************!!!

Criado 19 de abril de 2006
Ultima resposta 22 de abr. de 2006
Respostas 4
Participantes 3