A variável local pode não ter sido inicializada | Classe

the local variable may not have been initialized

Eu procurei alguns casos, mas nenhum me ajudava, acredito que esse é diferente. A variável não foi iniciada em outra classe.

Classe principal

else if ("Multiplication".equals(choice)){
     System.out.print("Enther the quantity of the numbers: ");
     byte n = sc.nextByte();
     int nulo = 0;
     System.out.println();
     
     System.out.println("Enter the numbers: ");
     for (int i = 0; i<n; i++){
     int numbers = sc.nextInt();
     int alt = numbers;
     
     int result = numbers * alt;
     ent= new entities(result);
 }     

System.out.println();
    System.out.print(ent);
   }

Classe secundária

public class entities {

     private int result;

     public entities(int result){
     this.result = result;
}

     public int getResult(){
     return result;
}

    public void setResult(int result){
    this.result = result;
}
}

Eu fiquei confuso, pois meu professor fez do mesmo jeito e deu certo (foi feito em outro exercício)

Como ele fez:

Classe secundária

private int number;
	private String holder;
	private double balance;
	
	public Account(int number, String holder) {
		this.number = number;
		this.holder = holder;
	}

	public Account(int number, String holder, double initialDeposit) {
		this.number = number;
		this.holder = holder;
		deposit(initialDeposit);
	}

	public int getNumber() {
		return number;
	}

	public String getHolder() {
		return holder;
	}

	public void setHolder(String holder) {
		this.holder = holder;
	}

	public double getBalance() {
		return balance;
	}

	public void deposit(double amount) {
		balance += amount;
	}
	
	public void withdraw(double amount) {
		balance -= amount + 5.0;
	}
	
	public String toString() {
		return "Account "
				+ number
				+ ", Holder: "
				+ holder
				+ ", Balance: $ "
				+ String.format("%.2f", balance);
	}

Classe principal

Account account;

		System.out.print("Enter account number: ");
		int number = sc.nextInt();
		System.out.print("Enter account holder: ");
		sc.nextLine();
		String holder = sc.nextLine();
		System.out.print("Is there an initial deposit (y/n)? ");
		char response = sc.next().charAt(0);
		if (response == 'y') {
			System.out.print("Enter initial deposit value: ");
			double initialDeposit = sc.nextDouble();
			account = new Account(number, holder, initialDeposit);
		}
		else {
			account = new Account(number, holder);
		}
		
		System.out.println();
		System.out.println("Account data:");
		System.out.println(account);
		
		System.out.println();
		System.out.print("Enter a deposit value: ");
		double depositValue = sc.nextDouble();
		account.deposit(depositValue);
		System.out.println("Updated account data:");
		System.out.println(account);
		
		System.out.println();
		System.out.print("Enter a withdraw value: ");
		double withdrawValue = sc.nextDouble();
		account.withdraw(withdrawValue);
		System.out.println("Updated account data:");
		System.out.println(account);
		
		sc.close();

Onde ele iniciou?

Desculpa se o post ficou muito grande. Não pensei num jeito de resumir isso :smiley:

Posta o código completo da classe principal, você só postou um else if.

   Scanner sc = new Scanner(System.in);
   Locale.setDefault(Locale.US);
   
   entities ent;
  
   System.out.print("U name: ");
   String name = sc.next();
   System.out.println();
   
   System.out.println("Hi: " + name + "!");
   System.out.println();
   
   System.out.println("Sum, Subtraction, Multiplication, Division?");
   
   String choice = sc.next();
   System.out.println();
   
   if ("Sum".equals(choice)){
     System.out.print("Enther the quantity of the numbers: ");
     byte n = sc.nextByte();
     System.out.println();
     
     int sum = 0;
     
     System.out.println("Enter the numbers: ");
     for (int i = 0; i<n; i++){
     int numbers = sc.nextInt();
     sum += numbers;
     }     

    System.out.println();
	System.out.print(sum);
   }
   
   else if ("Multiplication".equals(choice)){
     System.out.print("Enther the quantity of the numbers: ");
     byte n = sc.nextByte();
     int nulo = 0;
     System.out.println();
     
     System.out.println("Enter the numbers: ");
     for (int i = 0; i<n; i++){
     int numbers = sc.nextInt();
     int alt = numbers;
     
     int result = numbers * alt;
     ent= new entities(result);
     }     

    System.out.println();
	System.out.print(ent);
   }
   
   else if ("Multiplication".equals(choice)){
     System.out.print("Enther the quantity of the numbers: ");
     byte n = sc.nextByte();
     int nulo = 0;
     System.out.println();
     
     System.out.println("Enter the numbers: ");
     for (int i = 0; i<n; i++){
     int numbers = sc.nextInt();
     if (i == 0){
       nulo += numbers;
     }
     else{
       nulo -= numbers;
     }
     }     

    System.out.println();
	System.out.print(nulo);
   }
   sc.close();

Oi Semprelegit, tudo bem?

Acredito que você possa começar ajustando a sua classe entities renomeando para Entities.
O que pode estar ocorrendo também, é que a variável ent só está sendo inicializada dentro do else if. Tente inicializar antes das validações e utilizar ent.setResult(result) para setar o result no Objeto.

Espero ter ajudado!

Isso que você postou não é uma classe, é só um trecho de código.

Todavia o seu problema está aqui:

else if ("Multiplication".equals(choice)) {
    System.out.print("Enther the quantity of the numbers: ");
    byte n = sc.nextByte();
    int nulo = 0;
    System.out.println();

    System.out.println("Enter the numbers: ");
    for (int i = 0; i < n; i++) {
        int numbers = sc.nextInt();
        int alt = numbers;

        int result = numbers * alt;
        ent = new entities(result);  // você só inuicializa a variável ent aqui dentro desse for
    }

    System.out.println();
    System.out.print(ent);  // e aqui você manda imprimir a variável ent, mas se por ventura o código não entrar no for?
}

Variáveis locais precisam ser inicializadas antes de serem utilizadas.

Mas fiquei curioso, se eu iniciar fora do for não vai funcionar, pois o result ele é “inserido” dentro for

E dá um erro dizendo que result não pode ser considerado um variável

Então eu teria que iniciar dentro e fora for? Tipo uma sobrecarga?

o que tu pode fazer, é mandar 0 ao inicializar o objeto. Ou remover o parâmetro do construtor.

E se Multiplication não for igual a choice, qual será o valor de ent? Você deve responder essa pergunta para o compilador, ou seja, inicializando a variável ent antes de usá-la.

Não, mas você tem que garantir que você só vá usar ou ler sua variável após ela ter sido inicializada.
Você pode inicializar ela com null na declaração por exemplo.

Sobrecarga é quando você tem métodos de mesmo nome mas com parâmetros diferentes.

Pode mostrar um exemplo?

Como assim?

entities ent = null; // declarando e inicializando com null

Obrigado mesmo! Já estou a muito tempo achar a solução disso XD

Como assim “Setar” e Validações?

Quando ele imprime o valor, sai desse jeito:

Java.entities@4e48af7

Como resolvo isso?

O que você deseja imprimir?

O ent

O que você espera que apareça na tela ao mandar imprimir o ent?

System.out.println("Enter the numbers: ");
 for (int i = 0; i<n; i++){
 int numbers = sc.nextInt();
 int alt = numbers;
 
 int result = numbers * alt;
 ent = new entities(result);
 }     
System.out.println();
	System.out.print(ent);
   }

A multiplicação de todos os números que o usuário escreveu

Será que o jeito como eu fiz o result interfere em algo?

System.out.print(ent.getResult());