Array

ola, estou com o seguinte problema, preciso fazer com que o usuario digite o tamanho do array, porem quandi faço isso da erro, so comsegui fazer ele funcionar com um array com o tamanho fixo, exemplo abaixo:

package lista4;

import javax.swing.JOptionPane;

public class exercicio2 {
	
	 
	private static  dados nomes1[] = new dados[10];
	
	
	

	public static void main(String[] args) {
		
		
		
		
		int op = 50;
		
		while(op !=0) {
			op = Integer.parseInt(JOptionPane.showInputDialog(null,"Escolha a opção desejada:"
					+"\n 1-Cadastrar nome \n 2-Pesquisar nome \n 3- Listar todos os nomes \n 0-Sair"));
			
			switch(op) {
			
			case 1:{
				
				
				String nome = JOptionPane.showInputDialog(null,"Informe o nome");
				cadastrarNome(nome);
				
			}break;
			
			case 2:{
				String nomebusca = JOptionPane.showInputDialog(null,"Informe o nome para busca");
				String nomeRetorno = buscarNome(nomebusca);
				JOptionPane.showMessageDialog (null,nomeRetorno);
				
			}break;
			
			case 3:{
				for(int i = 0; i< 10;i++){
					if(nomes1[i]!=null) {
					JOptionPane.showMessageDialog(null,nomes1[i].getNome());
					}
				}
					
				}break;
				
				case 0: break;
				
			
					
				
				
		
				}
				
			}
	
		
			
		}
		
		

	
	public static void cadastrarNome(String nome) {
		
		
		for(int i = 0; i< 10;i++){
			
			if(nomes1[i]==null) {
			
				nomes1[i]= new dados();
			
			nomes1[i].setNome(nome);
			break;
			}
			 
			
			
			
			
			}
	
			
	}
	public  static String buscarNome (String nome ){
		
		String retorno = "";
		for(int i=0;i<10;i++){
		if ( nomes1[i]!= null && nomes1[i].getNome().equals(nome)){
			retorno = nomes1[i].getNome();
			break;
		}
			
			else {
				 retorno =  "Nao Encontrado";
				
			
		}
		
		}
		return retorno;
	

}
	
}

como devo fazer para que o usuario digite o tamanho do array? tentei de varias formas mas sempre dando erro…

Procure os comentários que possuem a palavra ALTERAÇÃO
Obs.: Renomei a classe dados para Dados, por ser uma convenção, não renomeei, em minha codificação para facilitar o ctrl+c/v.

import javax.swing.JOptionPane;

public class Ordenance {

    private static dados nomes1[];//ALTERAÇÃO

    public static void main(String[] args) {
        //INCLUSÃO
        nomes1 = new dados[Integer.valueOf(JOptionPane.showInputDialog("Quandas pessoas serao cadastradas"))];

        int op = 50;

        while (op != 0) {
            op = Integer.parseInt(JOptionPane.showInputDialog(null, "Escolha a opção desejada:"
                    + "\n 1-Cadastrar nome \n 2-Pesquisar nome \n 3- Listar todos os nomes \n 0-Sair"));

            switch (op) {

                case 1: {//ALTERAÇÃO
                    if (nomes1[nomes1.length -1] != null) {
                        JOptionPane.showMessageDialog(null, "Limite de cadastramentos atingidos");
                    }else{

                    String nome = JOptionPane.showInputDialog(null, "Informe o nome");
                    cadastrarNome(nome);
                    }

                }
                break;

                case 2: {
                    String nomebusca = JOptionPane.showInputDialog(null, "Informe o nome para busca");
                    String nomeRetorno = buscarNome(nomebusca);
                    JOptionPane.showMessageDialog(null, nomeRetorno);

                }
                break;

                case 3: {//ALTERAÇÃO
                    for (int i = 0; i < nomes1.length; i++) {
                        if (nomes1[i] != null) {
                            JOptionPane.showMessageDialog(null, nomes1[i].getNome());
                        }
                    }

                }
                break;

                case 0:
                    break;
            }
        }

    }

    public static void cadastrarNome(String nome) {

        for (int i = 0; i < 10; i++) {

            if (nomes1[i] == null) {

                nomes1[i] = new dados();

                nomes1[i].setNome(nome);
                break;
            }
        }
    }

    public static String buscarNome(String nome) {

        String retorno = "";//ALTERAÇÃO
        for (int i = 0; i < nomes1.length; i++) {
            if (nomes1[i] != null && nomes1[i].getNome().equals(nome)) {
                retorno = (String) nomes1[i].getNome();//ALTERAÇÃO
                break;
            } else {
                retorno = "Nao Encontrado";

            }

        }
        return retorno;
    }
}
1 curtida

Perfeito, justamente o que precisava, agradeço muito sua ajuda