Codigo Soma

Oi gente, sou nova em programação e tenho uma duvida.
Ler 3 valores (considere que não serão informados valores iguais) e escrever a soma dos
2 maiores.

O código esta somando independente de ser numero maior ou menor.

public static void main(String[] args) {
int v1 = Entrada.leiaInt(" Digite o valor 1 “);
int v2 = Entrada.leiaInt(” Digite o valor 2 “);
int v3 = Entrada.leiaInt(” Digite o valor 3 ");

    if (v3 < v1 && (v1 < v2)) {
        System.out.print(v1 + v2);
        
    } else if (v2 < v1 && v1 < v3) {
        System.out.print(v1 + v3);

        if (v2 < v1 && (v1 < v3)) {
            System.out.print(v1 + v3);
        } else {
            System.out.print(v2 + v3);
        }
    }
}

}
Alguém pode me ajudar

Posta o código da classe Entrada.

Já é o segundo pedido igual em menos de uma semana… deve ser algum trabalho. E ambos ligam o “complicómetro”.

Se o objetivo é somar os dois maiores, então temos de ver as condições em que dois dos valores são maiores que o terceiro

if (v1 > v3 && v2 > v3) {  // v3 é o menor
     System.out.print(v1 + v2);
} else if (v1 > v2 && v3 > v2) { // v2 é o menor
     System.out.print(v1 + v3);
} else { //aqui nao precisa de if, por exclusão de partes, v1 será o menor
     System.out.print(v2 + v3);
}
2 curtidas

Não apenas pedido igual… o código é praticamente idêntico!
(inclusive com o Entrada.leiaint())

Me parece algo mal convertido de portugol pra Java. Alguém fez o serviço pela metade para eles.
:rofl::rofl::rofl:

já que ninguém respondeu, vou deixar uma sugestão de código aqui, para as demais pessoas do mesmo curso que vierem no fórum:

CÓDIGO SOMA

    Scanner entrada = new Scanner(System.in);

    int tamanho = 0;

    System.out.print("Quer quantos números? ");
    tamanho = entrada.nextInt();

    int numeros[] = new int[tamanho];

    for (int i = 0; i < tamanho; i++) {
        System.out.print("Digite o " + (i + 1) + "º valor: ");
        numeros[i] = entrada.nextInt();
    }

    for (int j = 0; j < numeros.length - 1; j++) {
        for (int i = 0; i < numeros.length - 1; i++) {
            if (numeros[i] > numeros[i + 1]) {
                int temp = numeros[i + 1];
                numeros[i + 1] = numeros[i];
                numeros[i] = temp;
            }
        }
    }

    System.out.println("\nMaior: " + numeros[numeros.length - 1]);
    System.out.println("Segundo maior: " + numeros[numeros.length - 2]);

    entrada.close();

Porque não, simplesmente, assim?

  Arrays.sort(numeros);
1 curtida

Porque eu ainda não conhecia isso.
:rofl::rofl::rofl:

#tambémEstouAprendendoAinda

1 curtida

Aproveitando…

Se você tem exatamente 3 números, a solução mais simples e direta é a que já foi indicada acima pelo @pmlm.

Mas se a quantidade de números varia, e você só quer saber quais são os 2 maiores (e não precisa guardar os outros números), aí nem precisa guardar tudo em um array, pois dá pra fazer tudo no mesmo loop que lê os números:

Scanner entrada = new Scanner(System.in);

System.out.println("Quer quantos números?");
int tamanho = entrada.nextInt(); // não precisa criar a variável antes, pode fazer tudo de uma vez

// os maiores começam com o menor valor possível, assim qualquer valor digitado será maior que eles
int maior = Integer.MIN_VALUE;
int segundoMaior = Integer.MIN_VALUE;
for (int i = 1; i <= tamanho; i++) { // começa com 1, só pra não precisar somar 1 no println :-)
    System.out.print("Digite o " + i + "º valor: ");
    int n = entrada.nextInt();
    if (n > maior) {
        segundoMaior = maior;
        maior = n;
    } else if (maior >= n && n >= segundoMaior) {
        segundoMaior = n;
    }
}
System.out.printf("maior=%d, segundo maior=%d, soma=%d\n", maior, segundoMaior, maior + segundoMaior);

No else if as condições usam >= para o caso de todos os números serem iguais (senão segundoMaior nunca é setado).

1 curtida