Fórum Onde estou errando? #497419

10/10/2014

0

A ideia aqui é popular um array de inteiros e dar ele como return de uma função.

Mas toda vez que tento fazer função, o compilador pede static void main.

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.Scanner; 

public class LerArquivo3
{ 
  public static void main(String[] args) 
  { 
    try 
    { 
      FileReader arq = new FileReader("arquivoPossiveis.txt"); 
      BufferedReader lerArq = new BufferedReader(arq); 
      String linha = lerArq.readLine(); 
      int[6][3] arrayPossiveis;
	  int conta = 0;
	  
      // lê a primeira linha 
      // a variável "linha" recebe o valor "null" quando o processo 
      // de repetição atingir o final do arquivo texto 

      while (linha != null) 
      { 
         //System.out.printf("%s\n", linha); 
         linha = lerArq.readLine(); 
         for (int i=0; i<linha.length(); i++)
		 {
		    //System.out.print(linha.charAt(i));
			arrayPossiveis[conta][0] = Integer.valueOf(linha.charAt(0));
			arrayPossiveis[conta][1] = Integer.valueOf(linha.charAt(2));
			arrayPossiveis[conta][2] = Integer.valueOf(linha.charAt(4));
		 }
		 conta++;
		 //System.out.println();
         // lê da segunda até a última linha 
      } 

      arq.close(); 
    } catch (IOException e) 
    { 
      System.err.printf("Erro na abertura do arquivo: %s.\n", e.getMessage()); 
    } 
   System.out.println(); 
  } 
}

Aonde estou errando?
Carlos Rocha

Carlos Rocha

Responder

Posts

11/10/2014

Carlos Rocha

Acho que melhorou um pouco:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

public class LerArquivo4
{
//Classe sem atributos
LerArquivo4(String arquivo)
{
    this.leArquivo(arquivo);
}

private int[][] leArquivo(String arquivo)
{
      FileReader arq = new FileReader(arquivo);
      BufferedReader lerArq = new BufferedReader(arq);
      String linha = lerArq.readLine();
      int[][] arrayPossiveis = new int[2][3];
int conta = 0;

      // lê a primeira linha
      // a variável "linha" recebe o valor "null" quando o processo
      // de repetição atingir o final do arquivo texto

      while (linha != null)
      {
         //System.out.printf("%s\n", linha);
         linha = lerArq.readLine();
         for (int i=0; i<linha.length(); i++)
{
   //System.out.print(linha.charAt(i));
arrayPossiveis[conta][0] = Character.getNumericValue(linha.charAt(0));
arrayPossiveis[conta][1] = Character.getNumericValue(linha.charAt(2));
arrayPossiveis[conta][2] = Character.getNumericValue(linha.charAt(4));
}
conta++;
//System.out.println();
         // lê da segunda até a última linha
      }

      arq.close();
return arrayPossiveis;
   }
}

Mas ainda esta dando erro:
C:\java\ad2>javac LerArquivo4.java
LerArquivo4.java:16: error: unreported exception FileNotFoundException; must be
caught or declared to be thrown
      FileReader arq = new FileReader(arquivo);
                       ^
LerArquivo4.java:18: error: unreported exception IOException; must be caught or
declared to be thrown
      String linha = lerArq.readLine();
                                    ^
LerArquivo4.java:29: error: unreported exception IOException; must be caught or
declared to be thrown
         linha = lerArq.readLine();
                                ^
LerArquivo4.java:42: error: unreported exception IOException; must be caught or
declared to be thrown
      arq.close();
               ^
4 errors

C:\java\ad2>
Responder

Gostei + 0

11/10/2014

Carlos Rocha

Um erro ainda persiste:

Preciso retornar um array e não exibir ele. Pois vou usá-lo em outro arquivo em um loop.

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 

public class LerArquivo4
{ 

 public static void main (String[] args)
{
   String arquivo = "arquivoPossiveis.txt";
    try{
      FileReader arq = new FileReader(arquivo); 
      BufferedReader lerArq = new BufferedReader(arq); 
      String linha = lerArq.readLine(); 
      int[][] arrayPossiveis = new int[6][3];
	  int conta = 0;
	  
      // lê a primeira linha 
      // a variável "linha" recebe o valor "null" quando o processo 
      // de repetição atingir o final do arquivo texto
      while (linha != null) 
      { 
         for (int i=0; i<linha.length(); i++)
		 {
		    System.out.print(linha.charAt(i));
			arrayPossiveis[conta][0] = Character.getNumericValue(linha.charAt(0));
			arrayPossiveis[conta][1] = Character.getNumericValue(linha.charAt(2));
			arrayPossiveis[conta][2] = Character.getNumericValue(linha.charAt(4));
		 }
		 conta++;
		 System.out.println();
		 linha = lerArq.readLine(); 
         // lê da segunda até a última linha 
      } 

      arq.close(); 
	} catch (IOException e) 
    { 
      System.err.printf("Erro na abertura do arquivo: %s.\n", e.getMessage()); 
    }   
   }
}
Responder

Gostei + 0

11/10/2014

Carlos Rocha

Entendi.
Agora esta assim:

Criei 5 arquivos:


arquivoPossiveis.txt // com os numeros possiveis
arquivoObrigatorios.txt // com os numeros Obrigatorios

LerArquivoPossivel.java retornando um array multidimensional de int[6][3]
LerArquivoObrigatorio.java retornando um array multidimensional de int[2][2]

Principal.java. Com a saída principal

Uma coisa queria ver contigo: Deve ter uma forma de popular os dois arquivos ao mesmo tempo em java e ter um array multidimensional dinâmica.


arquivoPossiveis.txt // com os numeros possiveis
1 2 3
1 3 1
1 4 2
2 3 1
2 4 3
3 4 3

arquivoObrigatorios.txt // com os numeros Obrigatorios
1 2
3 4

LerArquivoPossivel.java retornando um array multidimensional de int[6][3]
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class LerArquivoPossivel
{
public static void main (String[] args)
{

}
int [][] getArray (String arquivo)
{
    return constroiArrayPossivel(arquivo);
}

int [][] constroiArrayPossivel(String arquivo)
{
    int [][] arrayImPossiveis = new int [0][0];
    try{
      FileReader arq = new FileReader(arquivo);
      BufferedReader lerArq = new BufferedReader(arq);
      String linha = lerArq.readLine();
      int[][] arrayPossiveis = new int[6][3];
int conta = 0;

      // lê a primeira linha
      // a variável "linha" recebe o valor "null" quando o processo
      // de repetição atingir o final do arquivo texto
      while (linha != null)
      {
         for (int i=0; i<linha.length(); i++)
{
arrayPossiveis[conta][0] = Character.getNumericValue(linha.charAt(0));
arrayPossiveis[conta][1] = Character.getNumericValue(linha.charAt(2));
arrayPossiveis[conta][2] = Character.getNumericValue(linha.charAt(4));
}
conta++;
linha = lerArq.readLine();
         // lê da segunda até a última linha
      }
      arq.close();
return arrayPossiveis;
} catch (IOException e)
    {
      System.err.printf("Erro na abertura do arquivo: %s.\n", e.getMessage());
return arrayImPossiveis;
    }  
   }
}

LerArquivoObrigatorio.java retornando um array multidimensional de int[2][2]
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class LerArquivoObrigatorio
{
public static void main (String[] args)
{

}
int [][] getArray (String arquivo)
{
    return constroiArrayObrigatorio(arquivo);
}

int [][] constroiArrayObrigatorio(String arquivo)
{
    int [][] arrayImObrigatorios = new int [0][0];
    try{
      FileReader arq = new FileReader(arquivo);
      BufferedReader lerArq = new BufferedReader(arq);
      String linha = lerArq.readLine();
      int[][] arrayObrigatorios = new int[2][2];
int conta = 0;

      // lê a primeira linha
      // a variável "linha" recebe o valor "null" quando o processo
      // de repetição atingir o final do arquivo texto
      while (linha != null)
      {
         for (int i=0; i<linha.length(); i++)
{
arrayObrigatorios[conta][0] = Character.getNumericValue(linha.charAt(0));
arrayObrigatorios[conta][1] = Character.getNumericValue(linha.charAt(2));
}
conta++;
linha = lerArq.readLine();
         // lê da segunda até a última linha
      }
      arq.close();
return arrayObrigatorios;
} catch (IOException e)
    {
      System.err.printf("Erro na abertura do arquivo: %s.\n", e.getMessage());
return arrayImObrigatorios;
    }  
   }
}

Principal.java. Com a saída principal

public class Principal
{
  public static void main (String[] args)
  {
    LerArquivoPossivel arquivoPossiveis = new LerArquivoPossivel();
int[][] arrayPossiveis = new int[6][3];
arrayPossiveis = arquivoPossiveis.getArray("arquivoPossiveis.txt");

    LerArquivoObrigatorio arquivoObrigatorios = new LerArquivoObrigatorio();
int[][] arrayObrigatorios = new int[2][2];
arrayObrigatorios = arquivoObrigatorios.getArray("arquivoObrigatorios.txt");
  }
}
Responder

Gostei + 0

11/10/2014

Carlos Rocha

Ok.

Por último.

Porque é que na linh 63 não imprime nada. Compilador não dá erro e roda normalmente?
import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList;

public class Principal
{ 

    public static void main (String[] args)
    {
try{
      String arquivo = "arquivoPossiveis.txt";
      FileReader arq = new FileReader(arquivo); 
      BufferedReader lerArq = new BufferedReader(arq); 
      String linha = lerArq.readLine(); 
 int contaLinha = 0;
 int contaColuna = 0;
 int conta = 0;
      // lê a primeira linha 
      // a variável "linha" recebe o valor "null" quando o processo 
      // de repetição atingir o final do arquivo texto
      while (linha != null) 
      { 
    contaColuna = 0;
         for (int i=0; i<linha.length(); i++)
{
   contaColuna++;
}
contaLinha++;
linha = lerArq.readLine(); 
         // lê da segunda até a última linha 
      } 

 ArrayList<Ligacoes> LigacaoObrigatoria = new ArrayList<Ligacoes>();  
 ArrayList<Ligacoes> LigacaoPossivel = new ArrayList<Ligacoes>();  
    
      int[][] arrayRetorno = new int[contaLinha][contaColuna];

      while (linha != null) 
      { 
         for (int i=0; i<linha.length(); i++)
{
  if(contaColuna==3)
  {
     int pontoA = Character.getNumericValue(linha.charAt(0));
     int pontoB = Character.getNumericValue(linha.charAt(2));
         LigacaoObrigatoria.add(new Ligacoes(pontoA,pontoB));  
  }
  if(contaColuna==5)
  {
     int pontoA = Character.getNumericValue(linha.charAt(0));
     int pontoB = Character.getNumericValue(linha.charAt(2));
     int distancia = Character.getNumericValue(linha.charAt(4));
         LigacaoPossivel.add(new Ligacoes(pontoA,pontoB));  
         new Ligacoes(pontoA,pontoB).informaDistancia(distancia); 
  }
}
conta++;
linha = lerArq.readLine(); 
         // lê da segunda até a última linha 
      } 
      arq.close(); 

 for (int i = 0; i < LigacaoObrigatoria.size(); i++) 
 { 
        int s = LigacaoObrigatoria.get(i).getPontoA(); 
        System.out.println(s); 
 }

} catch (IOException e) 
    { 
      System.err.printf("Erro na abertura do arquivo: %s.\n", e.getMessage());     
}   

  }
}
Responder

Gostei + 0

11/10/2014

Ronaldo Lanhellas

A ideia aqui é popular um array de inteiros e dar ele como return de uma função.

Mas toda vez que tento fazer função, o compilador pede static void main.

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.Scanner; 

public class LerArquivo3
{ 
  public static void main(String[] args) 
  { 
    try 
    { 
      FileReader arq = new FileReader("arquivoPossiveis.txt"); 
      BufferedReader lerArq = new BufferedReader(arq); 
      String linha = lerArq.readLine(); 
      int[6][3] arrayPossiveis;
	  int conta = 0;
	  
      // lê a primeira linha 
      // a variável "linha" recebe o valor "null" quando o processo 
      // de repetição atingir o final do arquivo texto 

      while (linha != null) 
      { 
         //System.out.printf("%s\n", linha); 
         linha = lerArq.readLine(); 
         for (int i=0; i<linha.length(); i++)
		 {
		    //System.out.print(linha.charAt(i));
			arrayPossiveis[conta][0] = Integer.valueOf(linha.charAt(0));
			arrayPossiveis[conta][1] = Integer.valueOf(linha.charAt(2));
			arrayPossiveis[conta][2] = Integer.valueOf(linha.charAt(4));
		 }
		 conta++;
		 //System.out.println();
         // lê da segunda até a última linha 
      } 

      arq.close(); 
    } catch (IOException e) 
    { 
      System.err.printf("Erro na abertura do arquivo: %s.\n", e.getMessage()); 
    } 
   System.out.println(); 
  } 
}

Aonde estou errando?



Pode o erro que está aparecendo no console executando este primeiro código.
Responder

Gostei + 0

11/10/2014

Carlos Rocha

Vou postar as 3 classes

Distancias.java
public class Distancias extends Ligacoes
{
  private int distancia;

  Distancias(int a, int b)
  {
     super (a,b);  
  }

  public void setDistancia(int c)
  {
    this.distancia = c;
  }

  public int getDistancia ()
  {
    return this.distancia;
  }

}

Ligacoes.java
public class Ligacoes
{
  private int pA, pB;
  private Distancias distancia;

  Ligacoes (int a, int b)
  {
    this.pA = a;
    this.pB = a;
  }

  public void informaDistancia (int _distancia)
  {
     distancia = new Distancias (this.pA, this.pB);
     distancia.setDistancia(_distancia);
//System.out.println(distancia.getDistancia());
  }

  public int getPontoA ()
  {
    return this.pA;
  }

  public int getPontoB ()
  {
    return this.pB;
  }  

  public int getDistanciaAB ()
  {
    return this.distancia.getDistancia();
  }  
}

Principal.java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

public class Principal
{
    public static void main (String[] args)
    {
try{
      String arquivo = "arquivoPossiveis.txt";
      FileReader arq = new FileReader(arquivo);
      BufferedReader lerArq = new BufferedReader(arq);  
      String linha = lerArq.readLine();  
ArrayList<Ligacoes> LigacaoObrigatoria = new ArrayList<Ligacoes>();  
ArrayList<Ligacoes> LigacaoPossivel = new ArrayList<Ligacoes>();  
boolean possivel;

      // lê a primeira linha
      // a variável "linha" recebe o valor "null" quando o processo de repetição atingir o final do arquivo texto

int pontoA, pontoB, distancia, contaColuna;

      while (linha != null)
      {
   contaColuna = linha.length();

pontoA = Character.getNumericValue(linha.charAt(0));
pontoB = Character.getNumericValue(linha.charAt(2));

if(contaColuna>=5)
{
  distancia = Character.getNumericValue(linha.charAt(4));  
      LigacaoPossivel.add(new Ligacoes(pontoA,pontoB));  
      new Ligacoes(pontoA,pontoB).informaDistancia(distancia);
}
else
{
      LigacaoObrigatoria.add(new Ligacoes(pontoA,pontoB));  
}

linha = lerArq.readLine();
        // lê da segunda até a última linha
      }

arq.close();

for (int i = 0; i < LigacaoPossivel.size(); i++)
{
        int s = LigacaoPossivel.get(i).getDistanciaAB();
        System.out.println(s);
}

} catch (IOException e)
    {
      System.err.printf("Erro na abertura do arquivo: %s.\n", e.getMessage());    
}
  }
}

Compila normal.

Mas dá erro de execução:
C:\java\2>java Principal
Exception in thread "main" java.lang.NullPointerException
        at Ligacoes.getDistanciaAB(Ligacoes.java:31)
        at Principal.main(Principal.java:50)

C:\java\2>


Ou seja: Como faço para, à partir da classe Principal, pegar o valor da variável distancia que esta na classe Distancias que estende a classe Ligações?
Responder

Gostei + 0

11/10/2014

Ronaldo Lanhellas

O erro está aqui neste trecho

distancia = Character.getNumericValue(linha.charAt(4));  
      LigacaoPossivel.add(new Ligacoes(pontoA,pontoB));  
      new Ligacoes(pontoA,pontoB).informaDistancia(distancia); // <-----ERRO AQUI



Você está criando o objeto Ligacoes mas não está atribuindo a nada, perdendo sua referência. Imagino que o que você queira é criar e depois adicionar na lista, então o certo seria:

distancia = Character.getNumericValue(linha.charAt(4));  
Ligacoes lig = new Ligacoes(pontoA,pontoB);
lig.informaDistancia(distancia);
      LigacaoPossivel.add(lig);  
Responder

Gostei + 0

11/10/2014

Carlos Rocha

Assim?
      while (linha != null) 
      { 
	    contaColuna = linha.length();
		 
		pontoA = Character.getNumericValue(linha.charAt(0));
		pontoB = Character.getNumericValue(linha.charAt(2));

		if(contaColuna>=5)
		{
           distancia = Character.getNumericValue(linha.charAt(4));  
           Ligacoes lig = new Ligacoes(pontoA,pontoB);
           lig.informaDistancia(distancia);
           LigacaoPossivel.add(lig);  		
		}	
		else
		{
           Ligacoes lig = new Ligacoes(pontoA,pontoB);
           LigacaoObrigatoria.add(lig);  		
		}

		linha = lerArq.readLine(); 
        // lê da segunda até a última linha 
      } 

É, deu certo.
Obrigado!
Responder

Gostei + 0

11/10/2014

Ronaldo Lanhellas

Assim?
      while (linha != null) 
      { 
	    contaColuna = linha.length();
		 
		pontoA = Character.getNumericValue(linha.charAt(0));
		pontoB = Character.getNumericValue(linha.charAt(2));

		if(contaColuna>=5)
		{
           distancia = Character.getNumericValue(linha.charAt(4));  
           Ligacoes lig = new Ligacoes(pontoA,pontoB);
           lig.informaDistancia(distancia);
           LigacaoPossivel.add(lig);  		
		}	
		else
		{
           Ligacoes lig = new Ligacoes(pontoA,pontoB);
           LigacaoObrigatoria.add(lig);  		
		}

		linha = lerArq.readLine(); 
        // lê da segunda até a última linha 
      } 

É, deu certo.
Obrigado!


Isso mesmo, mas no else você pode deixar como estava

else{
           LigacaoObrigatoria.add(new Ligacoes(pontoA,pontoB));   
Responder

Gostei + 0

11/10/2014

Carlos Rocha

Um, mas vou precisar de outra orientação tua.

Preciso criar 2 listas:

Uma que vai ter como base o arquivo arquivoPossiveis.txt e outra que terá por base o arquivo arquivoObrigatorios.txt.

Parece que terei que colocar isso tudo dentro de uma função que retorne um ArrayList e recebe como parâmetros o nome do arquivo,

Pode me orientar?

Tentei assim mas não deu certo:
import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList;

public class Principal
{ 
    public static void main (String[] args)
    {
	   populaArrayList("arquivoPossiveis.txt");
	   populaArrayList("arquivoObrigatorios.txt");
	}
	ArrayList<Ligacoes> populaArrayList (String arquivo)
	{
	try{
      //String arquivo = "arquivoPossiveis.txt";
      FileReader arq = new FileReader(arquivo); 
      BufferedReader lerArq = new BufferedReader(arq);  
      String linha = lerArq.readLine(); 	  
	  ArrayList<Ligacoes> Ligacao = new ArrayList<Ligacoes>();  
	  
      // lê a primeira linha 
      // a variável "linha" recebe o valor "null" quando o processo de repetição atingir o final do arquivo texto
	  
	  int pontoA, pontoB, distancia, contaColuna;
	  
      while (linha != null) 
      { 
	    contaColuna = linha.length();
		 
		pontoA = Character.getNumericValue(linha.charAt(0));
		pontoB = Character.getNumericValue(linha.charAt(2));
        Ligacoes lig;
		
		if(contaColuna>=5)
		{
           distancia = Character.getNumericValue(linha.charAt(4));  
           lig = new Ligacoes(pontoA,pontoB);
           lig.informaDistancia(distancia);
		}	
		else
		{
           lig = new Ligacoes(pontoA,pontoB);
		}
        Ligacao.add(lig);  		

		linha = lerArq.readLine(); 
        // lê da segunda até a última linha 
      } 
      
	  arq.close(); 
	  return Ligacao;
	  
	} catch (IOException e) 
    { 
      System.err.printf("Erro na abertura do arquivo: %s.\n", e.getMessage());     
	  return ArrayList<Ligacoes>;
	} 
  }
}
Responder

Gostei + 0

11/10/2014

Ronaldo Lanhellas

Mas o que não deu certo ? Você quer adicionar os 2 arquivos no mesmo objeto ArrayList ?
Responder

Gostei + 0

11/10/2014

Carlos Rocha

Na verdade é o seguinte:
Tenho dois arquivos de texto:

arquivoObrigatorios.txt
1 2
3 4
arquivoPossiveis.txt
1 2 3
1 3 1
1 4 2
2 3 1
2 4 3
3 4 3

Com eles, preciso popular 2 Array'sList's (entendeu né? rsrs) para depois compara-los.
Responder

Gostei + 0

11/10/2014

Carlos Rocha

Dei mais uma mexida mas não adiantou:
import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList;

public class Principal
{ 
    public static void main (String[] args)
    {
	  ArrayList<Ligacoes> Possiveis = populaArrayList("arquivoPossiveis.txt");
	  ArrayList<Ligacoes> Obrigatorios = populaArrayList("arquivoObrigatorios.txt");
	}
	ArrayList<Ligacoes> populaArrayList (String arquivo)
	{
	try{
      FileReader arq = new FileReader(arquivo); 
      BufferedReader lerArq = new BufferedReader(arq);  
      String linha = lerArq.readLine(); 	  
	  ArrayList<Ligacoes> Ligacao = new ArrayList<Ligacoes>();  
	  ArrayList<Ligacoes> vazio  = new ArrayList<Ligacoes>();    
	  
      // lê a primeira linha 
      // a variável "linha" recebe o valor "null" quando o processo de repetição atingir o final do arquivo texto
	  
	  int pontoA, pontoB, distancia, contaColuna;
	  
      while (linha != null) 
      { 
	    contaColuna = linha.length();
		 
		pontoA = Character.getNumericValue(linha.charAt(0));
		pontoB = Character.getNumericValue(linha.charAt(2));
        Ligacoes lig;
		
		if(contaColuna>=5)
		{
           distancia = Character.getNumericValue(linha.charAt(4));  
           lig = new Ligacoes(pontoA,pontoB);
           lig.informaDistancia(distancia);
		}	
		else
		{
           lig = new Ligacoes(pontoA,pontoB);
		}
        Ligacao.add(lig);  		

		linha = lerArq.readLine(); 
        // lê da segunda até a última linha 
      } 
      
	  arq.close(); 
	  return Ligacao;
	  
	} catch (IOException e) 
    { 
	  return vazio;
      System.err.printf("Erro na abertura do arquivo: %s.\n", e.getMessage());     	} 
  }
}
Responder

Gostei + 0

11/10/2014

Ronaldo Lanhellas

Na verdade é o seguinte:
Tenho dois arquivos de texto:

arquivoObrigatorios.txt
1 2
3 4
arquivoPossiveis.txt
1 2 3
1 3 1
1 4 2
2 3 1
2 4 3
3 4 3

Com eles, preciso popular 2 Array'sList's (entendeu né? rsrs) para depois compara-los.


Dados os arquivos acima que você mostro, eles tem formatação diferente, então você não pode usar o mesmo método. Até porque seu método está usando até a coluna 5 mas só vejo no máximo 3 colunas no arquivo.
Responder

Gostei + 0

11/10/2014

Carlos Rocha

Não, você não entendeu!

Cada coluna é 1 carácter na linha. Por isso carácter 5.

Viu como criei a função e chamei ela de dentro do método main? Pois é. Não funciona.

A questão de comparar, depois vou fazer um loop assim:

Pegar a primeira linha do ArrayList Obrigatórios e vou ver lá: 1 e 2.

Vou procurar nas linhas do ArrayList possiveis e ver se existe lá uma linha aonde os dois primeiros números ou são 1 e 2 ou 2 e 1 e o terceiro valor do array Possiveis é a distancia entre os pontos 1 e 2.

Preciso como isso ver se existe uma forma de eu ir de 1 para 2 anda que passando por exemplo 1-3, 3-2 e que tenho custo menor que 1-2 direto.

Sei. Vai dar trabalho. É de faculdade a distancia!

Veja como ficou a última alteração eliminado o método main e criando o construtor da classe:
Ele esta dando o erro do try sem ao menos o construtor estar sendo chamado por outra classe.
import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList;

public class CriaArrays
{ 
	String arquivo;

    CriaArrays(String _arquivo)
    {
	  this.arquivo = _arquivo;
	}
	
	ArrayList<Ligacoes> populaArrayList (String arquivo)
	{
	  ArrayList<Ligacoes> vazio  =  new ArrayList<Ligacoes>();    
	  try
	  {
        FileReader arq = new FileReader(arquivo); 
        BufferedReader lerArq = new BufferedReader(arq);  
        String linha = lerArq.readLine(); 	  
	    ArrayList<Ligacoes> Ligacao = new ArrayList<Ligacoes>();  
	 	int pontoA, pontoB, distancia, contaColuna; 
  
        while (linha != null) 
        { 
	      contaColuna = linha.length();
		 
	      pontoA = Character.getNumericValue(linha.charAt(0));
		  pontoB = Character.getNumericValue(linha.charAt(2));
          Ligacoes lig;
		
		  if(contaColuna>=5)
		  {
            distancia = Character.getNumericValue(linha.charAt(4));  
            lig = new Ligacoes(pontoA,pontoB);
            lig.informaDistancia(distancia);
		  }	
		  else
		  {
            lig = new Ligacoes(pontoA,pontoB);
		  }
          Ligacao.add(lig);  		

		  linha = lerArq.readLine(); 
          // lê da segunda até a última linha 
        } 
      
	    arq.close(); 
	    return Ligacao;	  
	} catch (IOException e) 
    { 
      System.err.printf("Erro na abertura do arquivo: %s.\n", e.getMessage());     	
	  return vazio;
	} 
  }
}
[code]
C:\java\2>javac CriaArrays.java
CriaArrays.java:60: error: unreachable statement
      System.err.printf("Erro na abertura do arquivo: %s.\n", e.getMessage());

      ^
CriaArrays.java:62: error: missing return statement
  }
  ^
2 errors

C:\java\2>

Onde estou errando?
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar