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

Muito obrigado!
Última dúvida

Eu coloquei para ele calcular 2x2x2 = 8, porém ele imprime 4

int numbers = sc.nextInt();
int alt = numbers;

Ele salvou um 2 em numbers, e o outro 2 no alt e depois multiplicou

Como eu posso fazer para ele multiplicar todos os valores dado?

Você precisa aprender a fazer teste de mesa para aprimorar sua lógica. :wink:

Exemplo de como implementar:

System.out.print("Enther the quantity of the numbers: ");
int quantidade = Integer.parseInt(sc.nextLine());
System.out.println();

int resultado = 1;
for (int i = 1; i <= quantidade; i++) {
    System.out.print("Enter number" + i + ": ");
    int numero = Integer.parseInt(sc.nextLine());
    resultado *= numero;
}
ent = new entities(resultado);
System.out.println();
System.out.print(ent.getResult());

Pergunta:
Qual a necessidade da classe entities?
Ela só tem um atributo e um get e set para o mesmo.

Isso é verdade kkk :smile:

Obs:

int quantidade = Integer.parseInt(sc.nextLine());

Você está convertendo um int num int?

---------------------------------------------------------------

Se eu armazenar os números numa variável, e depois multiplicar esse números eu posso “printar” assim?

System.out.print(result);

---------------------------------------------------------------

Qual a necessidade da classe entities ?

Eu pensava que tinha que armazenar eles em uma outra classe, ou criar um vetor.
Parece então que um int pode armazenar vários números, ou um String armazenar vários nomes, certo?

Sua pergunta nem faz sentido: Um int é um int, não precisa ser convertido pra ele mesmo.
Essa linha está convertendo para int a String retornada pelo método sc.nextLine().
Evite usar o nextInt() ou nextByte() quando estiver lendo entrada do usuário, pois estes métodos não consomem a quebra de linha que ocorre quando você pressiona ENTER.
O único método da classe Scanner que consome a quebra de linha é o nextLine().
Use a documentação do Java métodos quando você tiver dúvidas sobre o que um método de alguma classe faz.

Testou?

Não, uma variável int pode armazenar um número inteiro de 32 bits.

Não, um objeto do tipo String armazena uma cadeia de caracteres de tamanho fixo, mas nada impede dessa cadeia de caracteres serem vários nomes separados por espaço, por exemplo.

Então você me recomenda a usar o nextLine e converter para o tipo que eu quiser?

Porque quando eu coloquei o:

int numbers = Integer.parseInt(sc.nextLine());

Deu esse erro:

java.lang.NumberFormatException: For input string: ""
	at java.lang.Integer.parseInt(Integer.java:627)
	at java.lang.Integer.parseInt(Integer.java:650)
	at Java.app.main(app.java:49)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.duy.android.compiler.java.Java.run(Java.java:115)
	at com.duy.ide.javaide.run.activities.ExecuteActivity.executeDex(ExecuteActivity.java:147)
	at com.duy.ide.javaide.run.activities.ExecuteActivity.exec(ExecuteActivity.java:124)
	at com.duy.ide.javaide.run.activities.ExecuteActivity.access$100(ExecuteActivity.java:45)
	at com.duy.ide.javaide.run.activities.ExecuteActivity$1.run(ExecuteActivity.java:88)
	at java.lang.Thread.run(Thread.java:764)

Eu acho que é algum erro quando converti em int

Quando estiver usando o Scanner para ler entrada de dados a partir do teclado, utilize somente o nextLine().
Utilize os outros métodos somente quando estiver usando o Scanner para ler outras fontes de dados como arquivos ou sockets por exemplo.

Provavelmente você chamou o nextLine() depois ter chamado um nextByte() ou nextInt().

Vou me basear no código que você postou no início pra ilustrar o problema:

System.out.print("Enther the quantity of the numbers: ");
/*
 * aqui você chamou o nextByte
 * ELE NÃO CONSUMIU A QUEBRA DE LINHA GERADA AO PRESSIONAR ENTER
 */
byte n = sc.nextByte();
int nulo = 0;
System.out.println();

System.out.println("Enter the numbers: ");
for (int i = 0; i<n; i++) {
    /*
     * aqui você chamou o nextLine
     * só que esse nextLine não vai ler a entrada do usuário, ele vai primeiro
     * CONSUMIR A QUEBRA DE LINHA QUE FOI GERADA LÁ EM CIMA QUANDO VOCÊ USOU O nextByte
     * e vai retornar um String vazio: ""
     */
    int numbers = Integer.parseInt(sc.nextLine());

Por causa dessa característica da quebra de linha, é que é importante utilizar somente o nextLine() quando estiver lendo do teclado.

Você até poderia fazer assim, mas fica muito feio:

System.out.print("Enther the quantity of the numbers: ");
byte n = sc.nextByte();
sc.nextLine(); // consumir a quebra de linha do nextByte
int nulo = 0;
System.out.println();

System.out.println("Enter the numbers: ");
for (int i = 0; i<n; i++) {
    int numbers = sc.nextInt();
    sc.nextLine(); // consumir a quebra de linha do nextInt

Olha o que acontece quando eu insiro os números

Eu sei que o nextLine() ele consome a linha, mas às vezes ele dá esses bugs.

Como eu posso fazer isso do jeito certo? Porque meu professor disse para usar o nextLine() dessa forma

Posta o código completo de sua classe, não tem como adivinhar a sua implementação.

Scanner sc = new Scanner(System.in);
   Locale.setDefault(Locale.US);
  
   System.out.print("U name: ");
   String name = sc.next();
   System.out.println();
   
   System.out.println("Hi: " + name + "!");
   System.out.println();
   
   System.out.println("Sum, Sub, Mult, Div?");
   
   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 ("Mult".equals(choice)){
     System.out.print("Enther the quantity of the numbers: ");
     byte n = sc.nextByte();
     System.out.println();
     
     int a = 1;
     System.out.println("Enter the numbers: ");
     for (int i = 0; i<n; i++){
     sc.nextLine();
     int numbers = Integer.parseInt(sc.nextLine());
     
     a *= numbers;
     }     
    System.out.println();
	System.out.print(a);
   } 
   
   else if ("Sub".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();

Tenho a impressão que você tem dificuldade em interpretar textos.
Você não postou o código completo da classe.
E você só usou o nextLine() em uma pequena parte de seu código.

Veja os comentários no código abaixo:

Scanner sc = new Scanner(System.in);
Locale.setDefault(Locale.US);

System.out.print("U name: ");
String name = sc.next(); // aqui não está consumindo a quebra de linha
System.out.println();

System.out.println("Hi: " + name + "!");
System.out.println();

System.out.println("Sum, Sub, Mult, Div?");

String choice = sc.next(); // aqui não está consumindo a quebra de linha
System.out.println();

if ("Sum".equals(choice)) {
    System.out.print("Enther the quantity of the numbers: ");
    byte n = sc.nextByte(); // aqui não está consumindo a quebra de linha
    System.out.println();

    int sum = 0;

    System.out.println("Enter the numbers: ");
    for (int i = 0; i < n; i++) {
        int numbers = sc.nextInt(); // aqui não está consumindo a quebra de linha
        sum += numbers;
    }

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

else if ("Mult".equals(choice)) {
    System.out.print("Enther the quantity of the numbers: ");
    byte n = sc.nextByte(); // aqui não está consumindo a quebra de linha
    System.out.println();

    int a = 1;
    System.out.println("Enter the numbers: ");
    for (int i = 0; i < n; i++) {
        sc.nextLine(); // aqui vai ler uma linha desnecessária quando reiterar o laço
        int numbers = Integer.parseInt(sc.nextLine());

        a *= numbers;
    }
    System.out.println();
    System.out.print(a);
}

else if ("Sub".equals(choice)) {
    System.out.print("Enther the quantity of the numbers: ");
    byte n = sc.nextByte(); // aqui não está consumindo a quebra de linha
    int nulo = 0;
    System.out.println();

    System.out.println("Enter the numbers: ");
    for (int i = 0; i < n; i++) {
        int numbers = sc.nextInt(); // aqui não está consumindo a quebra de linha
        if (i == 0) {
            nulo += numbers;
        } else {
            nulo -= numbers;
        }
    }

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

Sim, bastante kk
Eu tirei aquela outra classe, e eu não mudei o sc.nextByte, porque quando tentei mudar deu erro

Você quer que eu passe todo o código? Até o pacote?
Sou lento nessas coisas

E você interpretou a mensagem de erro?
Ela costuma te dar informações bastante precisas.

Foi o que eu pedi, mas agora não precisa mais.

Se simplesmente copiar o código que você postou, como faz pra compilar e executar?
Você só havia postado o conteúdo de um método (eu acho).

Veja se o código abaixo te ajuda a entender melhor:

import java.io.PrintStream;
import java.util.Locale;
import java.util.Scanner;

public class Programa {

    public static void main(String[] args) {
        try {
            Programa programa = new Programa();
            programa.executar();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    private final Scanner entrada = new Scanner(System.in);
    private final PrintStream saida = System.out;

    public void executar() throws Exception {
        Locale.setDefault(Locale.US);

        String name = lerTexto("U name: ");
        saida.println("Hi: " + name + "!");
        saida.println();

        String choice = lerTexto("Sum, Sub, Mult, Div?\n\n");
        switch (choice) {
            case "Sum":
                executaSoma();
                break;
            case "Mult":
                executaMultiplicacao();
                break;
            case "Sub":
                executaSubtracao();
                break;
        }
    }

    private void executaMultiplicacao() {
        int quantidade = lerInteiro("Enther the quantity of the numbers: ");
        saida.println();

        int a = 1;
        saida.println("Enter the numbers: ");
        for (int i = 0; i < quantidade; i++) {
            int numbers = lerInteiro();

            a *= numbers;
        }
        saida.println();
        saida.print(a);
    }

    private void executaSoma() {
        int quantidade = lerInteiro("Enther the quantity of the numbers: ");
        saida.println();

        int sum = 0;

        saida.println("Enter the numbers: ");
        for (int i = 0; i < quantidade; i++) {
            int numbers = lerInteiro();
            sum += numbers;
        }

        saida.println();
        saida.print(sum);
    }

    private void executaSubtracao() {
        int quantidade = lerInteiro("Enther the quantity of the numbers: ");
        int nulo = 0;
        saida.println();

        saida.println("Enter the numbers: ");
        for (int i = 0; i < quantidade; i++) {
            int numbers = lerInteiro();
            if (i == 0) {
                nulo += numbers;
            } else {
                nulo -= numbers;
            }
        }

        saida.println();
        saida.print(nulo);
    }

    private int lerInteiro() {
        return Integer.parseInt(entrada.nextLine());
    }

    private int lerInteiro(String mensagem) {
        saida.print(mensagem);
        return lerInteiro();
    }

    private String lerTexto() {
        return entrada.nextLine();
    }

    private String lerTexto(String mensagem) {
        saida.print(mensagem);
        return lerTexto();
    }
}