Rudolfo Posted January 28, 2009 at 04:50 PM Report #240895 Posted January 28, 2009 at 04:50 PM 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!!!
Knitter Posted January 28, 2009 at 07:45 PM Report #240931 Posted January 28, 2009 at 07:45 PM 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 🙂
Rudolfo Posted January 29, 2009 at 12:19 AM Author Report #241002 Posted January 29, 2009 at 12:19 AM 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 } }
Knitter Posted January 29, 2009 at 02:07 PM Report #241040 Posted January 29, 2009 at 02:07 PM 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.
Rudolfo Posted January 29, 2009 at 03:47 PM Author Report #241062 Posted January 29, 2009 at 03:47 PM 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.
Knitter Posted January 29, 2009 at 08:33 PM Report #241149 Posted January 29, 2009 at 08:33 PM Não tenho truque nenhum tudo o que está faz parte do básico da linguagem, coisas que se aprendem nas primeiras aulas 🙂
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now