Metodo List<No>

3 respostas
L
Bom tenho o seguinte método:
List<No> listaNo = new ArrayList();
em uma certa parte do meu programa eu preciso pegar o valor da listaNo na posição "i" estou tentando utilizar da seguinte maneira
listaNo.get(i) == primeiro_valor
*primeiro_valor é do tipo inteiro. e fala q eu não posso utilizar esta comparação. bom vo posta a parte do meu codigo onde esta com problemas:
private void principal() throws FileNotFoundException, IOException {
        List<No> listaNo = new ArrayList();
        No t = new No();
        String aux;
        int c = 0, primeiro_valor = 0, segundo_valor = 0;
        aux = Op[c];
        String[] s = aux.split(" ");
        primeiro_valor = Integer.parseInt(s[0]);
        segundo_valor = Integer.parseInt(s[1]);
        t.ID = primeiro_valor;
        while (primeiro_valor != 0 && segundo_valor != 0) {
            boolean igual = false, tem = false;
            if (primeiro_valor == segundo_valor) {
                igual = true;
                Escreve(igual, tem, primeiro_valor, segundo_valor);
                c++;
                aux = Op[c];
                s = aux.split(" ");
                primeiro_valor = Integer.parseInt(s[0]);
                segundo_valor = Integer.parseInt(s[1]);
                continue;
            }
            else{
                if(t.apontados.isEmpty()){
                    t.apontados.add(segundo_valor);
                }
                else if(!t.apontados.isEmpty()){
                    for (int i = 0; i < listaNo.size(); i++){
                        if(listaNo.indexOf(i) == primeiro_valor){
                            for (int j = 0; j < t.apontados.size(); j++){
                               if(t.apontados.indexOf(j)==segundo_valor){
                                    Escreve(igual, tem, primeiro_valor, segundo_valor);
                                    GotoInstruction PROXIMO;
                                }
                            }
                            t.apontados.add(segundo_valor);
                        }
                    }
                }
            }
            No novo = new No();
            novo.ID = primeiro_valor;
            novo.apontados.add(segundo_valor);
            listaNo.add(novo);
            PROXIMO:
            c++;
            aux = Op[c];
            s = aux.split(" ");
            primeiro_valor = Integer.parseInt(s[0]);
            segundo_valor = Integer.parseInt(s[1]);
        }
        
    }

Op[] é uma string contendo os pares ordenados da seguinte maneira
1 1
1 2
1 3
1 4
1 5
1 2 <~~ elemento repetido
0 0 <~~ finaliza
até a parte de conferir se o primeiro_valor == segundo_valor esta ok.
para facilitar na segunda parte que esta dando erro eu quero somente fazer uma comparação e verificar se o elemento que eu vou inserir já não esta inserido.

Minha classe No:
public class No {
    public int ID;
    public List apontados;
    
    public No(){
        apontados = new ArrayList();
    }
}
como eu sei que provavelmente vão pedir o resto do código aqui esta ele:
public class LeEscreveArquivo {

    public String[] tarefas;
    public String[] Op;
    public String[] esq;
    public String[] dir;
    private int QtdTarefaPrivate;
    private int QtdLinhas;

    public void Le() throws FileNotFoundException, IOException {
        FileReader ordtopin = new FileReader(new File("C:\\Users\\User\\Documents\\NetBeansProjects\\Arquivo\\ordtop.in"));
        BufferedReader leitor = new BufferedReader(ordtopin);
        String linha = null;
        String linha1;
        int count = 0;
        int opcount = 0;
        linha1 = leitor.readLine();
        QtdTarefaPrivate = Integer.parseInt(linha1);
        VerQuantidadeLinhas();
        tarefas = new String[QtdTarefaPrivate];
        Op = new String[QtdLinhas];
        while (!"0 0".equals(linha)) {
            linha = leitor.readLine();
            if (count < 12) {
                tarefas[count] = linha;
                count++;
            } else {
                Op[opcount] = linha;
                opcount++;
            }
        }

        leitor.close();
        ordtopin.close();
        principal();
    }   //OK

    public void Escreve(boolean igual, boolean tem, int p, int s) throws IOException {
        FileWriter ordtoptxt = new FileWriter(new File("C:\\Users\\User\\Documents\\NetBeansProjects\\Arquivo\\ordtop1.txt"), true);
        PrintWriter saidatxt = new PrintWriter(ordtoptxt, true);
        /*
         * int c = 0; int linhas = QtdLinhas; while (linhas != 0) {
         * saidatxt.println(Op[c]); c++; linhas--; }
         *
         */
        if (igual && !tem) {
            saidatxt.println("Valor não pode ser igual " + p + " " + s);
        }
        if (tem && !igual) {
            saidatxt.println("Valor já inserido " + p + " " + s);
        }
        saidatxt.close();
        ordtoptxt.close();
        System.out.println("Salvo");
    }   //ok

    public void MostraTarefas() {
        System.out.println("Tarefas:");
        int c = 0;
        int QtdTarefa = QtdTarefaPrivate;
        while (QtdTarefa != 0) {
            System.out.println(tarefas[c]);
            c++;
            QtdTarefa--;
        }
        MostraOperações();
    }  //ok

    private void VerQuantidadeLinhas() throws FileNotFoundException, IOException {
        FileReader ordtopin = new FileReader(new File("C:\\Users\\User\\Documents\\NetBeansProjects\\Arquivo\\ordtop.in"));
        BufferedReader leitor = new BufferedReader(ordtopin);
        int v = 0;
        String linha = null;
        while (!"0 0".equals(linha)) {
            linha = leitor.readLine();
            v++;
        }
        QtdLinhas = (v - QtdTarefaPrivate) - 1;
        leitor.close();
        ordtopin.close();
    }  //ok

    private void MostraOperações() {
        System.out.println("Operações:");
        int c = 0;
        int linhas = QtdLinhas;
        while (linhas != 0) {
            System.out.println(Op[c]);
            c++;
            linhas--;
        }
    }  //ok

    private void principal() throws FileNotFoundException, IOException {
        List<No> listaNo = new ArrayList();
        No t = new No();
        String aux;
        int c = 0, primeiro_valor = 0, segundo_valor = 0;
        aux = Op[c];
        String[] s = aux.split(" ");
        primeiro_valor = Integer.parseInt(s[0]);
        segundo_valor = Integer.parseInt(s[1]);
        t.ID = primeiro_valor;
        while (primeiro_valor != 0 && segundo_valor != 0) {
            boolean igual = false, tem = false;
            if (primeiro_valor == segundo_valor) {
                igual = true;
                Escreve(igual, tem, primeiro_valor, segundo_valor);
                c++;
                aux = Op[c];
                s = aux.split(" ");
                primeiro_valor = Integer.parseInt(s[0]);
                segundo_valor = Integer.parseInt(s[1]);
                continue;
            }
            //daqui para baixo não sei se esta certo
            else{
                if(t.apontados.isEmpty()){
                    t.apontados.add(segundo_valor);
                }
                else if(!t.apontados.isEmpty()){
                    for (int i = 0; i < listaNo.size(); i++){
                        if(listaNo.indexOf(i) == primeiro_valor){
                            for (int j = 0; j < t.apontados.size(); j++){
                               if(t.apontados.indexOf(j)==segundo_valor){
                                    Escreve(igual, tem, primeiro_valor, segundo_valor);
                                    GotoInstruction PROXIMO;
                                }
                            }
                            t.apontados.add(segundo_valor);
                        }
                    }
                }
            }
            No novo = new No();
            novo.ID = primeiro_valor;
            novo.apontados.add(segundo_valor);
            listaNo.add(novo);
            PROXIMO:
            c++;
            aux = Op[c];
            s = aux.split(" ");
            primeiro_valor = Integer.parseInt(s[0]);
            segundo_valor = Integer.parseInt(s[1]);
        }
        
    }
}

3 Respostas

douglaskd

vamos começar por aqui:

listaNo.get(i) == primeiro_valor

você não pode comprar No com Int…

se você quer comparar o ID faça assim:

if(listaNo.get(i).ID == primeiro_valor)

continue debugando pois parece que tem mais erros ai no seu código

douglaskd

—Repetido—

L
amos começar por aqui:

listaNo.get(i) == primeiro_valor

você não pode comprar No com Int...

se você quer comparar o ID faça assim:

if(listaNo.get(i).ID == primeiro_valor)
continue debugando pois parece que tem mais erros ai no seu código
vlw amigo arumei e agora ele já esta verificando se o valor já foi inserido =D ficando assim:
private void principal() throws FileNotFoundException, IOException {
        List<No> listaNo = new ArrayList();
        No t = new No();
        String aux;
        int c = 0, primeiro_valor = 0, segundo_valor = 0;
        aux = Op[c];
        String[] s = aux.split(" ");
        primeiro_valor = Integer.parseInt(s[0]);
        segundo_valor = Integer.parseInt(s[1]);
        t.ID = primeiro_valor;
        while (primeiro_valor != 0 && segundo_valor != 0) {
            boolean igual = false, tem = false;
            if (primeiro_valor == segundo_valor) {
                igual = true;
                Escreve(igual, tem, primeiro_valor, segundo_valor);
                c++;
                aux = Op[c];
                s = aux.split(" ");
                primeiro_valor = Integer.parseInt(s[0]);
                segundo_valor = Integer.parseInt(s[1]);
                continue;
            }
            else{
                if(t.apontados.isEmpty()){
                    t.apontados.add(segundo_valor);
                }
                else if(!t.apontados.isEmpty()){
                    for (int i = 0; i < listaNo.size(); i++){
                        if(listaNo.get(i).ID == primeiro_valor){
                            for (int j = 0; j < listaNo.get(i).apontados.size(); j++){
                               if(listaNo.get(i).apontados.get(j) == segundo_valor){
                                    tem = true;
                                    Escreve(igual, tem, primeiro_valor, segundo_valor);
                                    GotoInstruction PROXIMO;
                                }
                            }
                            t.apontados.add(segundo_valor);
                        }
                    }
                }
            }
            No novo = new No();
            novo.ID = primeiro_valor;
            novo.apontados.add(segundo_valor);
            listaNo.add(novo);
            PROXIMO:
            c++;
            aux = Op[c];
            s = aux.split(" ");
            primeiro_valor = Integer.parseInt(s[0]);
            segundo_valor = Integer.parseInt(s[1]);
        }
        
    }
agora so falta verifica se forma LOOP =D tipo 1>2 1>3 1>4 3>1 <~~forma loop;
Criado 14 de setembro de 2012
Ultima resposta 14 de set. de 2012
Respostas 3
Participantes 2