• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Rudolfo

preenchendo uma matriz ...

6 mensagens neste tópico

boas malta, é o meu primeiro (de muitos, espero eu!) post neste forum!

e tou a fazê-lo sem apresentação prévia, pois tou mesmo todo baralhado das ideias relativamente a esta questão.

tenho uma matriz criada, de 6x6 ...

quero que ela seja preenchida pelo User casa a casa, contudo, nao quero que permita deixar passar casas "em branco", vazias ... como faço isso???

mostro-vos o meu código ...

 public static void main(String[] args) {
        int[][] mat=new int[6][6];
        for(int i=0;i<6;i++){
            for(int j=0;j<6;j++){
               
               mat[i][j]=Integer.parseInt(JOptionPane.showInputDialog("introduza valor para"+i+" "+j));
             
    }
}
    }

atenção, isso nao tá em nenhum método, pois era por mera curiosidade que eu estava a elaborar este código para compreender melhor uns exercícios e exemplos que vi por aí ... daí eu não me "preocupar" com a arrumação disso!!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Antes de atribuires o valor devolvido pelo utilizador deves verificar se o utilizador introduziu alguma coisa, por exemplo verificando se a string devolvida está vazia, podes usar o método isEmpty() das strings. Depois disso deves colocar o método parseInt dentro de um bloco try/catch porque o utilizador pode introduzir um texto em vez de um número e o método parseInt vai lançar uma excepção.

No fim, se tudo estiver correcto fazes a atribuição do número, senão pedes novamente o input. Para fazeres esta repetição podes usar um método while.

Espero não ter dado a solução :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas, respondeste sim ... nao usei o isEmpty() mas usei o isNumber ... pois ainda nao dei a materia dos try/catch....embora ela esteja presente na ajuda que me deram...

vou meter aqui a minha soluçao (com a ajuda de um colega meu :))

   String txt;  //cria uma variavel de texto que vai ser o texto inserido pela pessoa
        boolean numero;  //cria uma variavel de booleana que vai dizer se o numero é numero ou não
        int num = 0;  //cria uma variavel de texto que vai ser o texto inserido pela pessoa
        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 6; j++) {
                do {
                    numero = true;
                    txt = JOptionPane.showInputDialog("Introduza o valor para" + i + " " + j);  //a pessoa insere o texto
                    try {
                        num = Integer.parseInt(txt);
                    } catch (NumberFormatException nfe) {
                        numero = false;
                    }
                } while (numero == false);  //se não for, pede outro
      mat[i][j]=Integer.parseInt(txt);  //quando for um numero, chega aqui e converte para int e manda para a matriz
            }
        }

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma alternativa mais condensada. Atenção que escrevi isto sem testar, é possível que tenha um ou outro erro mas está cá a ideia.

int[][] mat = new int[6][6];
String txt;  //cria uma variavel de texto que vai ser o texto inserido pela pessoa
boolean numero;  //cria uma variavel de booleana que vai dizer se o numero é numero ou não
int j; //desta forma não se cria uma variável nova a cada iteração do for principal.
boolean isNumber;
for (int i = 0; i < mat.lenght; i++) { //usar o comprimento do vector principal
                                                //assim podes mudar o tamanho na declaração sem problemas.
    for (j = 0; j < mat[i].length; j++) { //Mesmo principio que anteriormente, 
                                                    //mas permite vectores secundários de tamanhos diferentes
        isNumber = false;
        while(!isNumber) {
            try {
                mat[i][j] = Integer.parseInt(JOptionPane.showInputDialog("Introduza o valor para" + i + " " + j));
                isNumber = true;
            } catch() {
                //ignore
                //Podiamos colocar o 'number' a false mas não vale a pena, ele nunca passou a true 
                //enquanto existiram erros
            }
        }
    }
}

Quando falo em vector principal e vector secundário, é como dizer linhas e colunas de uma matriz. Uma matriz não é mais que um vector de vectores, em que em cada posição do vector principal, dado pelo i ou as linhas, existe um outro vector, dado pelo j ou as colunas. Em Java um vector de vectores não precisa ser quadrado/rectangular, podendo ter linhas com números de colunas diferentes.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim, tens aí alguns "truques" ... e como eu ainda sou um "noobzito" (1º ano do curso )

perfiro ter aquilo tudo tim tim por tim tim , que com esses "atalhos", pois assim nao me perco tanto :)

mas mesmo assim, é bom saber, e ir ficando a saber, que existem "N " maneiras de se fazer a mesma coisa.

bgd.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não tenho truque nenhum tudo o que está faz parte do básico da linguagem, coisas que se aprendem nas primeiras aulas :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora