Matriz de String

5 respostas Resolvido
java
jairodione

Olá Pessoal!

Fiz uma matriz [4][3], gravo os nomes nela sem problemas. Gostaria de imprimir na tela em um JOptionPane da forma que é a matriz. Abaixo segue um exemplo da impressão que desejo e não estou conseguindo fazer:

nome1 nome2 nome3
nome4 nome5 nome6
nome7 nome8 nome9
nome10 nome11 nome12

Abaixo está o código:

public class MatrizString {
//inicio do metodo construtor

public static void main(String args[]) {
    String nome[][] = new String[4][3];
    String x = "", n;

    //inicio do laço for para gravar os nomes
    for (int l = 0; l < 4; l++) {
        //inicio do laço for interno
        for (int c = 0; c < 3; c++) {
            n = JOptionPane.showInputDialog("Digite um nome para a linha " + l + "ª e para " + c + "ª coluna");
            nome[l][c] = n;
            x += nome[l][c];
        }//fim do laço for externo
    }//fim do laço for para gravar os nomes

    JOptionPane.showMessageDialog(null, x, "Nomes Digitados pelo Usuario", JOptionPane.INFORMATION_MESSAGE);//Não desejo que imprima desta forma!
}//fim do metodo construtor

}

A impressão teria de ser assim:

System.out.println("Números Digitados Pelo Usuario em Ordem Crescente!");
    for(int i = 0;i < 16;i++){
        if(i == 4 || i == 8 || i == 12 || i == 16)
            System.out.println();
        System.out.printf("%5d", numeros[i]);
    }//fim do laço para mostrar os números digitados pelo usuário ordenado crescentemente

OBS.: QUERO QUE SEJA EM UM JOptionPane

Alguém pode me ajudar!!

5 Respostas

A

Não entendi direito, mas acho que é ± isso:

public static void main(String args[]) {
        String nome[][] = new String[4][3];
        String x = "";
        int contador = 1;//adicionado um contador

        for (int l = 0; l < 4; l++) {
            for (int c = 0; c < 3; c++) {
                x += nome[l][c] = "nome " + contador++ + ": " + JOptionPane.showInputDialog("Digite um nome para a linha " + l + "ª e para " + c + "ª coluna")+" ";
            }
            x += "\n";
        }
        JOptionPane.showMessageDialog(null, x, "Nomes Digitados pelo Usuario", JOptionPane.INFORMATION_MESSAGE);
    }

Variação sem um contador, a diferença é a utilização das coordenadas da matriz para fins de enumeração:

public static void main(String args[]) {
        String nome[][] = new String[4][3];
        String x = "";
        for (int l = 0; l < 4; l++) {
            for (int c = 0; c < 3; c++) {
                x += nome[l][c] = "nome " + indexOnAnyArray(l, c, 3) + ": " + JOptionPane.showInputDialog("Digite um nome para a linha " + l + "ª e para " + c + "ª coluna")+" ";
            }
            x += "\n";
        }
        JOptionPane.showMessageDialog(null, x, "Nomes Digitados pelo Usuario", JOptionPane.INFORMATION_MESSAGE);
    }
    private static int indexOnAnyArray(int linha, int coluna, int colunas) {
        return linha * colunas + coluna;
    }
jairodione

Olá addller!

É +ou- isso, você compreendeu o que desejo. Isso no código sem contador, mas como faço para colocar um espaço entre as palavras digitadas? o código está imprimindo assim:

nome1nome2nome3
nome4nome5nome6
nome7nome8nome9
nome10nome11nome12

E deve imprimir assim:

nome1 nome2 nome3
nome4 nome5 nome6
nome7 nome8 nome9
nome10 nome11 nome12
"GOSTARIA QUE FOSSE IMPRIMIDO DESTA FORMA, COM ESPAÇO ENTRE OS NOMES!"

A
Solucao aceita

Ambos as instruções tinham apenas um espaço, assim, basta aumentar:
Ajuste a instrução:
x += nome[l][c] = "nome " + (indexOnAnyArray(l, c, 3) + 1) + ": " + JOptionPane.showInputDialog("Digite um nome para a linha " + l + "ª e para " + c + "ª coluna") + " "; <- coloquei + espaços, só isso.

Saída:

Té+

rodevops

Senhores, as dicas são boas, porém evitem isso:

String x = "";

for...

    x += "";

Em termos de performance ainda mais sendo aplicativos desktop, com o tempo e a quantidade de strings concatenadas fica sofrível… lembre-se String em java é imutável… ou seja para cada concatenação, é criado um novo objeto em memória (pool de String’s)

Como um simples exemplo do que estou desmonstrando façam…

String texto = "Palavra";
texto.toUpperCase();
System.out.println(texto); // será que está tudo em letra maiúscula (caixa alta)?

Quando precisarem concatenar String’s em Java, usem StringBuffer ou StringBuilder, ex…

StringBuilder sb = new StringBuilder("");

for ...
    sb.append("texto");

E com isso até o espaço entra na dança assim…

for ...
    sb.append("texto").append(" ");

Fica a dica e bons estudos!

A

Tranquilo.
Preferi manter a string em detrimento a StringBuilder por uma questão prática (não dizer que foi preguiça :kissing_closed_eyes:) mesmo.
Mesmo assim a notificação é claramente proveitosa , pois termina por disseminar o conhecimento :smile_cat:.

Criado 15 de agosto de 2017
Ultima resposta 16 de ago. de 2017
Respostas 5
Participantes 3