Guardar numa matriz somente os numeros digitados entre um intervalo especifico

4 respostas
B

Opa galera, to com uma duvida meio simples e besta, acho que tem jeito mais f[acil de fazer do que do jeito que eu to fazendo

Por exemplo, nesse exercicio:

Desenvolva um programa em JAVA para: ler uma matriz A com dimensões M e N (valores
digitadosentre 1 e 30), classificar se ela é uma matriz nula, identidade ou nenhuma das duas.

Como faço pro programa só guardar na matriz um valor entre 1 e 30?

Tentei implementar algo do tipo:

int m[][] = new int[3][3];
		Scanner in = new Scanner(System.in);
		int validar = 0;
		
		for (int l = 0; l < m.length; l++){
		for (int c = 0; 1 < m.length; c++){
			System.out.println("Digite um valor entre 1 e 30 para guardar na matriz na linha "+l+" e na coluna "+c);
			validar = in.nextInt();
					if ((validar <= 30) && (validar >= 1)) m[l][c] = validar;
					if ((validar > 30) && (validar <1)) break;
		}
		}

mas não funciona, dá indexoutofbounds :/

e acho que talvez deva ter algum jeito mais fácil usando alguma função que eu desconheça.

Alguem pode me dar uma luz?

Muito obrigado!!!

4 Respostas

A
for (int c = 0; 1 < m.length; c++){

Você esta usando o número 1 ao invés da variável c.

if ((validar <= 30) && (validar >= 1)) m[l][c] = validar; if ((validar > 30) && (validar <1)) break;
Pode substituir isso por

if ((validar <= 30) && (validar >= 1)) 
m[l][c] = validar;  
else
break;
B

Puts cara! Que erro mais besta!

E pior que foi descuido meu, dei ctrl+c e ctrl+v e esqueci de mudar o L para o C hehe!

E ah, sobre o “else break;” ele tava assim inicialmente, mas como começou a dar erro eu fui testando de tudo hehe, ai mudei, mas brigadão pelo toque tambem.

Valeu cara, brigadão!

PS: Se alguém por ventura souber um jeito mais “limpo” de fazer essa verificação de numero digitado, dá um toque ai!

Obrigado a todos!

A

Você pode usar umas funções, para deixar o código mais limpo e no for das linhas mudar m.length para m[0].length, assim ele vai pegar o length da segunda dimensão, nesse caso funcionou como antes pois os dois possuiam o mesmo tamanho, segue o código:

public static void main(String args[]){
		
		int m[][] = new int[3][3];   
		int num = 0;  
		for (int l = 0; l < m.length; l++){  
			for (int c = 0; c < m[0].length; c++){  
		    	do{
		    		System.out.println("Digite um valor entre 1 e 30 para guardar na matriz na linha "+l+" e na coluna "+c);
		    		num = pegarNum();	
		    	}while(!validarNum(num));
			}  
		}  
	}
	
	public static boolean validarNum(int num){		
		return ((num <= 30) && (num >= 1));
	
	}
	
	public static int pegarNum(){
		Scanner in = new Scanner(System.in); 
		return in.nextInt();
	}
ruben_m
if ((validar > 30) && (validar <1)) break;

não é boa pratica usar a instrução break nesse contesto de quebra de cilclo

assim como as instruções continue e GOTO

Criado 25 de agosto de 2011
Ultima resposta 26 de ago. de 2011
Respostas 4
Participantes 3