Código CRUD em Array com erro: onde está o erro?

1 resposta
java
PabloJava

Estou aprendendo a programar agora, e estou usando o BlueJ para ajudar na evolução da minha lógica.

A ideia do código abaixo é conter métodos que possam realizar as tarefas de incluir novos cantores ou eliminar ou alterar. Então criei uma classe com todas essas ideias, mas está havendo um erro que eu desconheço: “constructor Cantor in class Cantor cannot be applied to given types”, que traduzo assim: o método construtor na classe Cantor não pode ser aplicado aos tipos dados.

Realmente não sei que erro é esse, alguém consegue resolver o mistério? Os vários sinais de maior indicam a linha de código com problema.

public class Cantor {
    private Cantor [] cantor; //array de classe nulo;
    
    public void inserirCantor(String nome, float salario) {
        int controlePosicao = 0; //controla a posição dos cantores;
        
        if(cantor == null) { // verifica se o array está vazio;
            cantor = new Cantor[1];
            controlePosicao = 0; // vai zerar a posição;
        } else {
            Cantor [] backup = cantor; // caso o array tenha cantor, o mesmo será guardado no array de backup criado
            cantor = new Cantor[cantor.length + 1]; // aumenta o array original em uma posição;
            
            for(int i = 0; i < backup.length; i++) { // copia os objetos para o array original;
                cantor[i] = backup[i];
                controlePosicao = backup.length; //organiza a posição;
            }
        }
        
        cantor[controlePosicao] = new Cantor(nome, salario); // criar objeto na posição inserindo dados;
    }
    
    public void modificarCantor(int controlePosicao, String nome, float salario) { // modifica a ficha do cantor
        if(isPosicaoValida(controlePosicao)) { // verifica se a posição é válida;
            cantor[controlePosicao].setNome(nome); // faz a alteração do nomeo do cantor;
            cantor[controlePosicao].setSalario(nome); // faz a alteração do salario do cantor;
        }
    }
    
    public void excluirCantor(int controlePosicao) { // faz a exlusão de um cantor
        if(posicaoValida(controlePosicao)) { // verificar se a posição é válida
            if(cantor.length > 1) { // saber se existe mais de um cantor;
                cantor [] backup = cantor; // cria um novo array para guardar os novos cantores;
                cantor = new Cantor[cantor.length - 1]; //reduz uma posição no array original;
                int posicaoOriginal = 0; // controla a posição no array original;
                
                for(int i = 0; i < backup.length; i++){ //copia objetos para o array original, menos o cantor indicado
                    if(i != controlePosicao) {
                        cantor[posicaoOriginal ++] = backup[i];
                    }
                }
            } else {
                cantor = null; // vai anular o array original;
            }
        }
    }
    
    public void mostrarCantores() { // mostrar todos os cantores cadastrados;
        for(Cantor listarCantores : cantor) { //For Each para mostrar os cantores;
            System.out.println(listarCantores.getNome() + " " + listarCantores.getSalario());
        }
    }
    
    private boolean isPosicaoValida(int controlePosicao){ // verifica se a posição informada é válida;
        if(cantor == null || cantor > ficha.length - 1){ //caso a posição seja não exista ou a posição seja maior que o array;
            System.out.println("Posição não foi encontrada"); //informar do erro;
            return false; // retorna "errado";
        }
        
        return true; // retorna "correto";
    }
}

1 Resposta

D

Olá

Esse código tem muitos problemas, mesmo que eu te ajude a consertar este problema, vai aparecer outros erros.

Primeiro separar as coisas

Use a classe Cantor para armazenar as informações do cantor e crie a classe CantorDAO para simular um banco de dados.

A classe cantor ficaria assim:

public class Cantor {
    public String nome;
    public float salario;
}

A classe CantorDAO ficaria

public class CantorDAO {
    public int inserirCantor(String nome, float salario) {
        // cria um cantor
        Cantor c = new Cantor();
        c.nome = nome;
        c.salario = salario;
        // insere no banco
        return inserirCantor(c);
    }
    public int inserirCantor(Cantor cantor) {
        // implementar, retorna a posicao do vetor
    }
    public Cantor obterCantor(int indice) {
        // implementar
    }
    public void atualizarCantor(int indice, Cantor novoCantor) {
        // implementar
    }
    public void excluirCantor(Cantor cantor) {
        // implementar
    }
    public int qtdCantores() {
        // implementar, returna a quantidade de cantores no banco
    }
}
Criado 24 de junho de 2016
Ultima resposta 25 de jun. de 2016
Respostas 1
Participantes 2