[Resolvido] Arrays com tamanho indefinido

Olá gente!
Minha dúvida é a seguinte:
Eu preciso fazer um array com um certo número de linhas e colunas, só que esses números vão ser digitados pelo usuário na execução do programa.

Como eu posso fazer isso?

Já tentei fazer tipo:

[code]int lcont=0,ccont=0;
int vetor[][]= new int [lcont][ccont];

        int linhas= Integer.parseInt(JOptionPane.showInputDialog(null,"Digite o número de linhas do array:"));
      
       int colunas= Integer.parseInt(JOptionPane.showInputDialog(null,"Digite o número de colunas do array:"));
 
    lcont=linhas;
    ccont=colunas;[/code]

Mas naum deu certo… :oops:

Sora, Bom dia.

Faça o seguinte inicie a matriz depois de ter os valores do usuario ok?

     /** Evite usar variaves desnecessarias*/                  

     int linhas= Integer.parseInt(JOptionPane.showInputDialog(null,"Digite o número de linhas do array:"));
        
     int colunas= Integer.parseInt(JOptionPane.showInputDialog(null,"Digite o número de colunas do array:"));
     
     int vetor[][]= new int [linhas][colunas]; // Entendeu?

Espero ter ajudado…
caso não fosse o que procurava me perdoe…
Abraços…

Sim,era isso mesmo,muito obrigada !!! :smiley:

Mas infelizmente surgiu outro problema… :cry:

Estou usando try/catch para evitar que o usuário digite letras ou numeros inválidos assim:

try { int linhas= Integer.parseInt(JOptionPane.showInputDialog(null,"Digite o número de linhas do array:")); } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(null,"Valor inválido!"); } try { int colunas= Integer.parseInt(JOptionPane.showInputDialog(null,"Digite o número de colunas do array:")); } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(null,"Valor inválido!"); }

E isso causa problema em todas as linhas que possuem as variáveis “linhas” e colunas"… O que eu estou fazendo de errado? :?

Sora,

Bom depende de como quer tratar o erro… deseja que a aplicação termine caso o valor esteja incorreto? ou quer ficar em um laço até que o usuario entre com o valor correto?

Sobre o erro,

Entenda que o compilador não encherga fora do try {} nada que tenha sido declarado dentro do mesmo.
Porque caso entre no catch ele não acharia a variavel que é declarada dentro do try.

Entende?

Sora, declare as variáveis fora do try{} catch{}

[quote]Sora,

Bom depende de como quer tratar o erro… deseja que a aplicação termine caso o valor esteja incorreto? ou quer ficar em um laço até que o usuario entre com o valor correto? [/quote]

Esta aplicação que eu estou fazendo é um exercício sobre try/catch, eu estou fazendo a aplicação encerrar caso receba um valor inválido, mas se tiver como fazer ele repetir até receber um valor válido melhor ainda. Tem como fazer isso sem usar o try/catch?

E tipo…agora quando eu declaro as variáveis linhas e colunas primeiro, o vetor dá erro falando as variáveis não foram inicializadas.

Programinha mais enjoado esse… :stuck_out_tongue:

[quote]Sora,

Bom depende de como quer tratar o erro… deseja que a aplicação termine caso o valor esteja incorreto? ou quer ficar em um laço até que o usuario entre com o valor correto? [/quote]

Esta aplicação que eu estou fazendo é um exercício sobre try/catch, eu estou fazendo a aplicação encerrar caso receba um valor inválido, mas se tiver como fazer ele repetir até receber um valor válido melhor ainda. Tem como fazer isso sem usar o try/catch?

E tipo…agora quando eu declaro as variáveis linhas e colunas primeiro, o vetor dá erro falando as variáveis não foram inicializadas.

Programinha mais enjoado esse… :stuck_out_tongue:

Sora, Bom dia.

Vc pode usar uma função que verifica se a String Recebida é numerica ou não e jogar ela em um do{}while.
Vou te passar a função e a ideia é essa veja o que consegue fazer ai.

	
public static boolean isNumero(String texto) {  
		String number = "0123456789";  
		
		for(int i = 0; i < texto.length(); i++){
			if(!(number.indexOf(texto.charAt(i)) != -1)){
				return false;
			}
		}
		return true;
	 }
 

Att,
Ricoldi

[quote=ricoldi]Sora, Bom dia.

Vc pode usar uma função que verifica se a String Recebida é numerica ou não e jogar ela em um do{}while.
Vou te passar a função e a ideia é essa veja o que consegue fazer ai.

	
public static boolean isNumero(String texto) {  
		String number = "0123456789";  
		
		for(int i = 0; i < texto.length(); i++){
			if(!(number.indexOf(texto.charAt(i)) != -1)){
				return false;
			}
		}
		return true;
	 }
 

Att,
Ricoldi[/quote]

Muito obrigada,Ricoldi, com do/while eu consigo fazer normalmente o que eu quero, mas o problema é que o exercício pede que use try/catch para verificar se o valor é válido ou não e cada hora essa estrutura gera um problema diferente. Agora quando eu declaro as variáveis linha e coluna fora do try/catch, ele pede que as variáveis sejam inicializadas, mesmo o vetor sendo iniciado depois dessas variáveis receberem os valores. :frowning:

Sora,

Entendi seu problema porem não concordo com o exemplo aplicado por seu professor pois não é correto utilizar try{}catch{} para controle de fluxo. E já que a função dele é ensinar deve pelo menos ensinar corretamente. “espero estar errado”

Aqui tem um link bom para você dar uma olhada:
http://br.geocities.com/vanessasabino/java/ej6.html

sobre seu problema assim que deve funcionar corretamente:


	int vetor[][] = null;
	
    while (Vetor == null){
    	try {                  
        	int linhas= Integer.parseInt(JOptionPane.showInputDialog(null,"Digite o número de linhas do array:"));

   			int colunas= Integer.parseInt(JOptionPane.showInputDialog(null,"Digite o número de colunas do array:"));
		
			vetor[][]  = new int [linhas][colunas];

        }catch (NumberFormatException ex) {
        	JOptionPane.showMessageDialog(null,"Valor inválido!");
        }
	}

Acho que um metodo assim resolve seu problema:

private boolean isNumero(String valor) { try { Integer.parseInt(valor); return true; catch(NumberFormatException ex) { return false; } }

Soh explicando, se passar alguma coisa q nao seja um numero pela String valor o método parseInt da classe Integer irá lançar a exceção NumberFormatException. Então aqui nos capturamos a exceção e retornamos false caso ela seja levantada! :wink:

Valeu gente, eu consegui resolver o problema aqui !!! :smiley:

ricoldi, ele não pediu para controlar o fluxo do programa com try/catch não, era pra usar só pra testar se o valor era válido ou não, mas o fluxo do programa deveria continuar assim mesmo. A questão de controlar o fluxo do programa eu mesma que tive curiosidade de saber se era possível, :wink:

Por favor, coloque [Resolvido] no assunto do primeiro post.

Att,
Ricoldi