Jump to content

ler dados de um ficheiro para um array


midnight2k

Recommended Posts

estou com uma pequena duvida no programa que estou a elaborar.. então é assim eu tenho um ficheiro txt com uns dados.. e quero no programa em java passar esses dados para um array.. ou seja os dados no txt estão separados por o caracter ":" o que eu quero e' ler esses dados certos para um array... mas nao consigo ver como fica o codigo :S

alguem me pode elucidar como deverei fazer?

Link to comment
Share on other sites

Então poderas me dizer o que estara errado neste codigo?  :wallbash:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Formatter;
import java.util.Scanner;
public class Main {
    public static void main(String[] abc) throws FileNotFoundException{
        String lin;
        String[ ][ ] jogador;
        int l,c;
        Scanner fi=new Scanner(new File("jogadores.txt"));
        while(fi.hasNextLine()){
            for (int i=0; i<l; i++){
                for (int j=0; j<c; j++){
                    lin = fi.nextLine();
                    jogador[l][c] = lin.split(":");
                }
            }
        }
        
        for(int p=0; p<jogador.length; p++) {
            System.out.println("Nº"+p+"nome"+jogador[l]+"golos"+jogador[c]);
        }
    }
}
Link to comment
Share on other sites

Isso está mal penso que assim funciona e está correcto.

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Formatter;
import java.util.Scanner;
public class Main {
    public static void main(String[] abc) throws FileNotFoundException{
        String lin;
        String[ ] jogador;
        int l,c;
        Scanner fi=new Scanner(new File("jogadores.txt"));
        while(fi.hasNextLine()){
            for (int i=0; i<l; i++){
                for (int j=0; j<c; j++){
                    lin = fi.nextLine();
                    jogador = lin.split(":");
                }
            }
        }
        
        for(int p=0; p<jogador.length; p++) {
            System.out.println("Nº"+p+"nome"+jogador[l]+"golos"+jogador[c]);
        }
    }
}

PS :  Isso compilava ?? quele jogador [l][c] = .... penso que nem existe em Java.

I haven’t lost my mind; it’s backed up on DVD somewhere!

Link to comment
Share on other sites

É impressão minha ou estás a atribuir sempre o valor da última linha à variável "jogador"? Estás a sobrepor sempre o valor da variável...

E pensas que não existem matrizes em Java? Mas que raio?!...

Aqui está uma alternativa, adicionei um ficheiro de teste para confirmar que este é o formato pretendido. O caminho do ficheiro está hardcoded mas é simples de mudar.

public static void main(String[] args) {
BufferedReader reader = null;
        try {
            String line;
            Vector<String[]> v = new Vector<String[]>();
            
            reader = new BufferedReader(new FileReader(new File("c:\\teste.txt")));

            while ((line = reader.readLine()) != null) {
                v.add(line.split(":"));
            }
            
            for(String[] s : v) {
                System.out.println("Antes: " + s[0] + " / Depois: " + s[1]);
            }

        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            try {
                reader.close();
            } catch (IOException ex) {
                //ignore
            }
        }
    }
Link to comment
Share on other sites

É impressão minha ou estás a atribuir sempre o valor da última linha à variável "jogador"? Estás a sobrepor sempre o valor da variável...

E pensas que não existem matrizes em Java? Mas que raio?!...

Ups pois é não reparei nesse problema estava a pensar numa só linha.

Claro que existe matrizes em Java mas não da forma que ele estava a fazer acho que não dá dado que ele não inicializa o array. Para alem disso tento evitar array multidimencionais.

I haven’t lost my mind; it’s backed up on DVD somewhere!

Link to comment
Share on other sites

Knitter desculpa a minha ignorancia mas ainda nao sou nenhum programador avançado em java portanto ainda não posso programar nesses horizontes x)

Pois eu tava a fazer isto tudo mal.. e depois de andar as voltas com isto cheguei ao meu codigo final.. mas nao final como o esperado..  ? mas ja tive a olhar para isto e não tou a encontrar o problema de isto nao funcionar..

primeiramente não me conseguia carregar os dados do ficheiro..

depois da-me uns quantos erros dentro da estrutura case

ja me ando a passar com isto :x  :wallbash:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Formatter;
import java.util.Scanner;
public class Main {
    public static void main(String[] abc) throws FileNotFoundException{
        Scanner ler = new Scanner(System.in);
        Scanner fi=new Scanner(new File("jogadores.txt"));
        Formatter fo=new Formatter(new File("jogadores.txt"));
        String lin;
        String[] jogadores;
        int[] golos=new int[22];
        String[] nomes=new String[22];
        int nelem=0;
        int n=0;
        int m=menu();
        while(m > 0 || m < 8){
            switch(m){
                case 1:while(fi.hasNextLine()){
                    lin = fi.nextLine();
                    jogadores = lin.split(":");
                    nelem=ler(jogadores,nomes,golos,nelem);
                }
                m=menu();
                break;
                case 2:System.out.println("Introduza o nome do jogador que deseja pesquisar:");
                introduz=ler.next();
                int pos=pesquisar(jogadores,n,introduz);
                if(pos==-1)
                    System.out.println("O jogador" + introduz + "não se encontra na lista.");
                else System.out.println("O jogador" + introduz + "está localizado na posição "+pos);
                m=menu();
                break;
                case 3:System.out.println("Introduza o nome do jogador que prentende adicionar o golo:");
                introduz=ler.next();
                boolean v=marcar(jogadores,nomes,golos,n,introduz,novo);
                if (v==true)
                    System.out.println("Golo adicionado com sucesso.");
                m=menu();
                break;
                case 4:guardar(jogadores,nomes,golos,nelem);
                m=menu();
                break;
            }
        }
        fi.close();
        fo.close();
    }
    
    public static int menu(){
        int opcao;
        Scanner ler = new Scanner(System.in);
        System.out.println("1 - Ler Jogadores");
        System.out.println("2 - Pesquisar Jogadores");
        System.out.println("3 - Adicionar Golos");
        System.out.println("4 - Gravar");
        System.out.println("0 - Sair");
        opcao=ler.nextInt();
        return opcao;
    }
    public static int ler(String[] jogadores, String []nomes, int[] golos, int n){
        nomes[n]=jogadores[1];
        golos[n]=Integer.parseInt(jogadores[0]);
        System.out.println("Dados carregados com sucesso.");
        return n+1;
    }
    
    public static int pesquisar(String []jogadores,int n,String introduz){
        int i=0,res=-1;
        for (i=0; i<n; i++){
            if(jogadores[i].equals(introduz)){
                return i;
            }
        }
        return -1;
    }
    
    public static boolean marcar(String []jogadores, String[]nomes, int []golos, int n,String introduz,String novo){
        boolean res=false;
        int pos;
        pos=pesquisar(jogadores,n,introduz);
        if(pos!=-1){
            golos[pos]=golos[pos]+1;
            res=true;}
        return res;
    }
    
    public static void guardar(String []jogadores, String []nomes, int[]golos, int nelem){
        for(int i=0; i<nelem;i++) {
            //fo.format("%s%s%d%n",nomes[i],":",golos[i]);
        }
        System.out.println("Dados guardados com sucesso.");
    }
}


Link to comment
Share on other sites

Que erros na estrutura case? E já agora, podes colocar um ficheiro de texto exemplo para o que pretendes?

Quanto à minha programação, não fiz nada de especial, o mais estranho que podes ver talvez seja o uso de genéricos, de resto é um simples while para ler linha a linha e um foreach para mostrar o texto lido.

Ups pois é não reparei nesse problema estava a pensar numa só linha.

Claro que existe matrizes em Java mas não da forma que ele estava a fazer acho que não dá dado que ele não inicializa o array. Para alem disso tento evitar array multidimencionais.

Isso de não ter iniciado a matriz é outro problema 🙂 , mas a ideia estava +/- correcta. E não tens razão nenhuma para evitar matrizes, é apenas mais um objecto, são referências como qualquer outro objecto 🙂

Link to comment
Share on other sites

pois mas tens ai termos que ainda não estou muito familiarizado para ja  ? quanto ao ficheiro que estou a usar está em anexo aqui.

O objectivo do programa seria ler do ficheiro de texto “jogadores.txt”, o nome dos jogadores e os golos para um array isto num metodo como esta citado para posteriormente tratar dos dados nos metodos seguintes, depois o metodo pesquisar(...) que recebe o nome de um jogador e devolve a posição em que este se encontra no array; o marcar que adiciona um golo ao array do respectivo jogador e por fim o gravar para o output ficheiros.txt

os erros na estrutura case são referentes ao introduz não sei porque esta a acusar erro  :nono1:

Cumps.

Link to comment
Share on other sites

Eu tb tenho de fazer este exercicio e tou-me a passar...

no exercicio diz para criar um metodo ler() para ler o conteudo do ficheiro para um array.

Até aqui ta tudo a funcionar, mas depois diz também para criar um metodo pesquisar.

No metodo pesquisar eu queria usar os 2 arrays que preenchi no metodo ler(). porque senao o metodo ler nao fazia sentido...

Nao deve dar com o return, porque eu queria aceder aos 2 arrays.

era mais facial com uma matriz, mas no exercicio diz para usar arrays

:|

Como é que eu faço para o metodo pesquisar ter acesso aos 2 arrays preenchidos pelo metodo ler?

Cumpz

Link to comment
Share on other sites

da maneira como ele esta  fazer o codigo as funcoes tem de ser declaradas static, pq dentro de uma funcao static so podes usar funcoes static se estiverem na mesma classe (i guess).

boas programacoes

Dentro de um método estático podes invocar métodos estáticos de qualquer classe e métodos de instância quando a instância está declarada dentro do método estático.

Mas os métodos apresentados não deviam ser estáticos, como disse, parece que está a programar em C.

Link to comment
Share on other sites

Uma matriz é um array de arrays

Mas só como curiosidade, estão a aprender POO? é que o código apresentado está errado no que toca a Java, isto porque estão a usar Java como se de uma linguagem procedimental se tratasse, Java é POO. Além de que os métodos não devem ser estáticos.

Nós nas aulas apenas aprendemos programação procedimental, e apenas trabalhamos com metodos static.

Apenas houve uma aula para nós (alunos), termos a noção de que os metodos nao têm de ser static, etc.

Mas isto ainda é o começo, não se pode começar a complicar muito..

E nestes exercicios fazemos as coisas de acordo com o que aprendemos nas aulas.

P.S. já resolvi a minha dúvida, era muito simples.

Cumpz

Link to comment
Share on other sites

Mas isto ainda é o começo, não se pode começar a complicar muito..

Começo ou não, não vos deviam ensinar coisas erradas. Teria sido mais simples terem-vos dito que era necessário instanciar sempre a classe Main e chamar o métodos dessa classe, assim não vos ensinavam erros. Mas ainda bem que resolveste o problema.

Link to comment
Share on other sites

Nós nas aulas apenas aprendemos programação procedimental, e apenas trabalhamos com metodos static.

Apenas houve uma aula para nós (alunos), termos a noção de que os metodos nao têm de ser static, etc.

Mas isto ainda é o começo, não se pode começar a complicar muito..

E nestes exercicios fazemos as coisas de acordo com o que aprendemos nas aulas.

P.S. já resolvi a minha dúvida, era muito simples.

Cumpz

podias postar o codigo dos metodos que usaste para ter uma ideia de como implementaste isso?

cumps.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.