Error using maximum number of vectors, and does not return to menu

Asked

Viewed 27 times

0

I am new to programming language and would like to know if anyone can help me, here is the following problem:

PS: I know the error is because I am using my object limit, but I do not want the error program, I want it to return to the menu (it was also created)

public static int Q = 1;
public static int indice = 0;
Produto[] pp = new Produto[Q];

public void execCadastro() {
    Scanner cad = new Scanner(System.in);
    this.pp[indice] = new Produto();    
     if(indice >= Q){
         System.out.println("Todos os espaços foram preenchidos");
         return;
     }else

        System.out.println("Codigo: ");
        int codigo = cad.nextInt();
        this.pp[indice].setCodigo(codigo);
        cad.nextLine();
        System.out.println("Descricao: ");
        String desc = cad.nextLine();
        this.pp[indice].setDescricao(desc);
        System.out.println("valor: ");
        double value = cad.nextDouble();
        this.pp[indice].setValor(value);
        indice++;
    }

public void execImprimir() {
    Scanner imp = new Scanner(System.in);
    if(indice > 0) {
        System.out.println("Qual produto deseja ler?");
        int pos = imp.nextInt();
        if(pos < 0 || pos>2) {
            System.out.println("Produto Inexistente.");
        }else {
            this.pp[pos].Imprimir();
        }
    }else {
        System.out.println("Nenhuma conta foi criada.");
    }

}
public void execDesconto() {
    Scanner desc = new Scanner(System.in);
    if(indice > 0) {
        System.out.println("Qual produto deseja ler?");
        int pos = desc.nextInt();
        if(pos < 0 || pos>2) {
            System.out.println("Produto nao existe");
        }else {
            System.out.println("Qual o valor de desconto? ");
            int valor = desc.nextInt();
            this.pp[pos].desconto(valor);
        }
    }else {
        System.out.println("Nenhuma conta foi criada.");
    }

}
public void execParcela() {

    Scanner parc = new Scanner(System.in);
    if(indice > 0) {
        System.out.println("Qual produto deseja ler?");
        int pos = parc.nextInt();
        if(pos < 0 || pos>2) {
            System.out.println("Produto nao existe");
        }else { 
            double valor = this.pp[pos].getValor();
            int ret = this.pp[pos].parcelar(valor);
         if(ret == 0) {
             System.out.println("Valor nao pode ser parcelado.");
         }else {
             System.out.println("Valor Parcelado");
         }

    }

}

}

public static void main(String[] args) {

      PrincipalProduto obj = new PrincipalProduto();
       Scanner sc = new Scanner(System.in);
       int op = 0;

     while (op != 9){   

        System.out.println("Entre com o teclado com qual opção deseja seguir. ");
        System.out.println("1 - Cadastro");
        System.out.println("2 - Imprimir");    
        System.out.println("3 - Desconto");      
        System.out.println("4 - Parcela");
        System.out.println("9 - Sair");
        op = sc.nextInt();
        switch(op){
            case 1:
                obj.execCadastro();
                break;
            case 2:
                obj.execImprimir();
                break;
            case 3:
                obj.execDesconto();
                break;
            case 4:
                obj.execParcela();
                break;   
        }

     }   
    }

}
  • As I said, the problem is in the Register... which does not return me to the menu at the time the vector limits to 2.

  • I also tested by assigning value to the index in the if, which corresponds correctly in the execution, but do not want so, I want it to receive the value Q as parameter.

1 answer

0


Do first the if before creating the new instance, see below:

public void execCadastro() {
  Scanner cad = new Scanner(System.in);  
   if(indice >= Q){
       System.out.println("Todos os espaços foram preenchidos");
       return;
   }else
      this.pp[indice] = new Produto();  
      System.out.println("Codigo: ");
      int codigo = cad.nextInt();
      this.pp[indice].setCodigo(codigo);
      cad.nextLine();
      System.out.println("Descricao: ");
      String desc = cad.nextLine();
      this.pp[indice].setDescricao(desc);
      System.out.println("valor: ");
      double value = cad.nextDouble();
      this.pp[indice].setValor(value);
      indice++;
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.