Problema com loop!

5 respostas
P

eu tenho um array e quando ele tiver o fim é para parar, mas.....

public class loopdados {
    public String [][] dados =  {{"C6H12O6","seta", "C2H6O","CO2", "fim", "s"},
                           {"Na2CO3", "HCl", "seta", "NaCl", "H2O", "CO2"},
                           {"C6H12O6", "seta", "C2H6O", "CO2","fim", "a"},};
        String texto = null;
        String textoantigo;
    public static void main(String args[]) {
        int i = 0;
        int j = 0;
        
        loopdados p = new loopdados();
        
        for (i=0; p.dados[j][i].equals("fim"); i++) {
         p.textoantigo = p.texto;
         p.texto = p.textoantigo + p.dados[i][j] + " + ";
         System.out.print(p.texto);
        
    }

}

5 Respostas

ViniGodoy

Faltou o for pra o J.

public class LoopDados {
   public String [][] dados =  {
      {"C6H12O6","seta", "C2H6O","CO2", "fim", "s"},
      {"Na2CO3", "HCl", "seta", "NaCl", "H2O", "CO2"},
      {"C6H12O6", "seta", "C2H6O", "CO2","fim", "a"},};

   public void fazerLoop() {
      String textoAntigo = "";
      String texto = "";

      for (int i = 0; i < dados.length; i++) {
         for (int j = 0; i < dados[i].length; j++) {
            if (dados[i][j].equals("fim"))
               return;

            textoAntigo = texto;
            texto = textoAntigo + dados[i][j] + " + ";
            System.out.print(texto);
         }
      }
   }            

   public static void main(String args[]) {
      new LoopDados().fazerLoop();
   }
}
P

Voltei....
eu quero colocar em forma de equação química:
ex.C6H12O6 --> C2H6O + CO2

eu to testando a dados[1][] pq é o maior e nao está saindo como o desejado

eu tenho como saida isto:

Na2CO3HCl →
Na2CO3HCl → NaCl +
Na2CO3HCl → NaCl +

public class LoopDados {
    public String [][] dados =  {
       {"C6H12O6","seta", "C2H6O","CO2", "fim", "s"},
       {"Na2CO3", "HCl", "seta", "NaCl", "H2O", "CO2"},
       {"C6H12O6", "seta", "C2H6O", "CO2","fim", "a"},};

    public void fazerLoop(int j) {
       String textoantigo = "";
       String texto = "";
       int i = 0;
// (deveria) serve para colocar o + entre duas substancias antes da seta
       while (i < dados.length){
               texto = textoantigo + dados[j][i];
               textoantigo = texto;
               i++;

               if (dados[j][i].equals("seta")){
               texto = textoantigo + "  \u2192  ";
               textoantigo = texto;
               System.out.println(texto);
               i++;}
               else{texto = textoantigo + "  +  ";}
               
           }

//(deveria) serve para colocar o + entre duas substancias depois da seta

      while (i <= dados.length){
               texto = textoantigo + dados[j][i];
               textoantigo = texto;
               i++;
               if (dados[j][i].equals("fim")){
               }
               else{texto = textoantigo + "  +  ";
               textoantigo = texto;}
               System.out.println(texto);

           }
       System.out.println(texto);
        }

       
    

    public static void main(String args[]) {
       new LoopDados().fazerLoop(1);
    }
 }
edu_fernandes

Pedro.
Repare que você esta fazendo a seguinte lógica.
Você varre toda a sua equação quimica a procura do ‘seta’ para por um + antes dela e somente depois você parte para a busca da ‘seta’ para por o + depois dela.
Se vc já achou a seta logo vc sabe que antes dela terá um + e depois também.
Entendeu a lógica.
Ou você colocaria um while dentro do outro. Ou então basta procurar uma lógica que você compreenda para assim que eu encontrar ‘seta’ colocar + antes de depois dela.

Abraço e espero ter ajudado.

edu_fernandes

Desconsidere boa parte do que eu escrevi.
Em um erro de leitura não peercebi que depois você busca por ‘fim’ e não por ‘seta’ novamente.

pmlm

Aquela “s” e aquele “a” são lixo, certo? Isso é sinal que o array bidimensional não deve ser a melhor solução para o teu problema…

Porque não crias uma estrutura tua?
Algo assim:

public class LoopDados {

    public Equacao[] dados = { new Equacao(new String[] { "C6H12O6" }, new String[] { "C2H6O", "CO2" }),
            new Equacao(new String[] { "Na2CO3", "HCl" }, new String[] { "NaCl", "H2O", "CO2" }),
            new Equacao(new String[] { "C6H12O6" }, new String[] { "C2H6O", "CO2" }) };

    public void fazerLoop() {
        String texto = "";

        for (int i = 0; i < dados.length; i++) {
            texto = "";
            for (int j = 0; j < dados[i].ladoEsquerdo.length; j++) { //percorre os elementos do lado esquerdo
                if (j != 0) {  // se não é o primeiro adiciona um + antes
                    texto += " + ";
                }
                texto += dados[i].ladoEsquerdo[j];
            }
            texto = texto + "  \u2192  "; //todos os elementos do lado esquerdo inseridos, insere a seta

            for (int j = 0; j < dados[i].ladoDireito.length; j++) { //percorre os elementos do lado direito
                if (j != 0) { // se não é o primeiro adiciona um + antes
                    texto += " + ";
                }
                texto += dados[i].ladoDireito[j];
            }

            System.out.println(texto);
        }
    }

    public static void main(String args[]) {
        new LoopDados().fazerLoop();
    }

    class Equacao {

        String[] ladoEsquerdo;

        String[] ladoDireito;

        Equacao(String[] ladoEsquerdo, String[] ladoDireito) {
            this.ladoEsquerdo = ladoEsquerdo;
            this.ladoDireito = ladoDireito;
        }
    }
}

NOTAS:

  • Idealmente a variável texto deve ser StringBuilder e não String
  • Como há código repetido para percorrer os arrays, esta parte pode ser separada em outro método
Criado 15 de novembro de 2010
Ultima resposta 15 de nov. de 2010
Respostas 5
Participantes 4