Pessoal, gostaria que dessem uma olhada no meu código e, se possível, me ajudem a corrigi-lo. É um dos exercícios do capítulo 2 da 6ª edição do livro Java - Como Programar.
A descrição é a seguinte: Escreva um aplicativo que insere três inteiros digitados pelo usuário e exibe a soma, a média, o produto e os números menores e maiores.
O erro é que quando coloco valores iguais, a variável maior não altera seu valor inicial.
Desde já, agradeço.
[code]import java.util.Scanner;
public class Ex217 {
public static void main ( String [] args ) {
Scanner input = new Scanner( System.in );
int num1;
int num2;
int num3;
int soma;
int media;
int prod;
int maior = -2147483648;
int menor = 2147483647;
System.out.print( "Didite o primeiro númnero inteiro: " );
num1 = input.nextInt();
System.out.print( "Digite o segundo número inteiro: " );
num2 = input.nextInt();
System.out.print( "Digite o terceiro número inteiro: " );
num3 = input.nextInt();
soma = num1 + num2 + num3;
media = soma / 3;
prod = num1 * num2 * num3;
if ((num1 > num2) && (num1 > num3))
maior = num1;
else if ((num2 > num1) && (num2 > num3))
maior = num2;
else if((num3 > num1) && (num3 > num2))
maior = num3;
else if((num1 < num2) && (num1 < num3))
menor = num1;
else if ((num2 < num1) && (num2 < num3))
menor = num2;
else if((num3 < num1) && (num3 < num2))
menor = num3;
else if((num1 == num2) && (num1 > num3))
maior = num1;
else if((num1 == num3) && (num1 > num2))
maior = num1;
else if((num2 == num3) && (num2 > num1))
maior = num2;
else if((num1 == num2) && (num1 < num3))
menor = num1;
else if((num1 == num3) && (num1 < num2))
menor = num1;
else if((num2 == num3) && (num2 < num1))
menor = num2;
System.out.printf( "A soma dos inteiros é %d\n", soma);
System.out.printf( "A média dos inteiros é %d\n", media);
System.out.printf( "O produto desses inteiros é %d\n", prod);
System.out.printf( "O maior dos inteiros é %d\n", maior);
System.out.printf( "O menor dos inteiros é %d\n", menor);
}//Fim do método main
Acho que não expliquei direito. Eu tenho que inserir 3 números e retornar tudo que o aplicativo pede. Se eu inserir um 3 na variável num1 e um 3 na variável num2, e mesmo esses valores sendo maiores que a variável num3, o valor da variável maior não é alterado (maior é o nome da variável).
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import java.util.Scanner;
/**
*
* @author admin
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int num1;
int num2;
int num3;
int soma;
int media;
int prod;
int maior;
int menor;
System.out.print("Didite o primeiro númnero inteiro: ");
num1 = input.nextInt();
maior = num1; // o primeiro numero sempre e o maior
menor = num1; // e tambem o menor
System.out.print("Digite o segundo número inteiro: ");
num2 = input.nextInt();
maior = maiorNumero(num2, maior); // metodo para validar qual o maior - atual ou o novo numero
menor = menorNumero(num2, menor); // metodo para validar qual o menor - atual ou o novo numero
System.out.print("Digite o terceiro número inteiro: ");
num3 = input.nextInt();
maior = maiorNumero(num3, maior); // metodo para validar qual o maior - atual ou o novo numero
menor = menorNumero(num3, menor); // metodo para validar qual o menor - atual ou o novo numero
soma = num1 + num2 + num3;
media = soma / 3;
prod = num1 * num2 * num3;
System.out.printf("A soma dos inteiros é %d\n", soma);
System.out.printf("A média dos inteiros é %d\n", media);
System.out.printf("O produto desses inteiros é %d\n", prod);
System.out.printf("O maior dos inteiros é %d\n", maior);
System.out.printf("O menor dos inteiros é %d\n", menor);
}//Fim do método main
public static int maiorNumero(int pNum, int pMaior) {
if (pNum > pMaior) {
return pNum;
} else {
return pMaior;
}
}
public static int menorNumero(int pNum, int pMaior) {
if (pNum < pMaior) {
return pNum;
} else {
return pMaior;
}
}
}
vc exagerou nos IF´s…
seguindo a mesma lógica que a sua, faça assim…
tve if faltando igualdade e outros que tavam errados…
mude esses if…
import java.util.Scanner;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author Damiao
*/
public class MaiorMenor
{
public static void main ( String [] args ) {
Scanner input = new Scanner( System.in );
int num1;
int num2;
int num3;
int soma;
int media;
int prod;
int maior = -2147483648;
int menor = 2147483647;
System.out.print( "Didite o primeiro númnero inteiro: " );
num1 = input.nextInt();
System.out.print( "Digite o segundo número inteiro: " );
num2 = input.nextInt();
System.out.print( "Digite o terceiro número inteiro: " );
num3 = input.nextInt();
soma = num1 + num2 + num3;
media = soma / 3;
prod = num1 * num2 * num3;
if((num1>=num2)&&(num1>=num3))
maior = num1;
if((num2>=num1)&&(num2>=num3))
maior = num2;
if((num3>=num1)&&(num3>=num2))
maior = num3;
if((num1<=num2)&&(num1<=num3))
menor = num1;
if((num2<=num1)&&(num2<=num3))
menor = num2;
if((num3<=num1)&&(num3<=num2))
menor = num3;
System.out.printf( "A soma dos inteiros é %d\n", soma);
System.out.printf( "A média dos inteiros é %d\n", media);
System.out.printf( "O produto desses inteiros é %d\n", prod);
System.out.printf( "O maior dos inteiros é %d\n", maior);
System.out.printf( "O menor dos inteiros é %d\n", menor);
}//Fim do método main
}//Fim da classe
Andei verificando e o erro ocorre no seguinte código
else if ((num2 < num1) && (num2 < num3))
menor = num2;
else if((num3 < num1) && (num3 < num2))
menor = num3;
Linhas 37,38,39 e 40.
Usando o exemplo que você falou, utilizei os seguintes valor
1- num1 = 3, num2 = 1 e num3 = 3
2 - num1=3, num2=3 e num1= 1
e percebi que realmente a variável nao muda o valor inicial pelo seguinte motivo.
Quando você insere os valores 3,1,3 respectivamente, ele cai no seguinte if
num2 é menor que numero 1 && num2 é menor que num3.
Caindo nesse if ele não chega até a condição de num1 = num2 ou vice e versa… O mesmo ocorre para o 2 exemplo.
Se você colocar essas linhas por ultimo e fizer o teste você vai ver que irá conseguir realizar oq estava tentando, porém vai dar outros erros.
Se eu fosse você, utilizaria o exemplo do nosso amigo Damiao Cunha. Até pq nós programador(na minha opinião) temos que procurar caminhos curtos!
Vou dar uma olhada nas soluções que vocês apresentaram e resolver meu erro por aqui. Com certeza terei muitos outros posts desse tipo. Minhas dúvidas são muitas e minha experiência é mínima em pogramação.[/b][/color]
Rperet a minha sugestão leva o fato de que sempre que possível você deve tentar sair de um numero fixo de testes (no seu caso são três) então imagine se o teste fosse para 20 numeros, acredito que a quantidade de testes lógicos seria imensa (if´s) e extremamente trabalhoso por este motivo a sugestão de criar um método (maiorNumero / menorNumero) para realizar os cálculos se torna mais plausível como diriam os caçadores de mitos.
montroni, eu percebi a criação desses métodos no seu código e, por isso, deixei ele guardado aqui para quando eu começar a implementar, algum ter idéia de como começar.
Ainda não cheguei a implementar nenhum método. Como disse, a experiência é mínima e por isso resolvi começar a postar por aqui. :lol:
Embora você esteja no começo, e o conhecimento no começo é um pouco limitado, eu incentivaria você a estudar o código do nosso amigo montroni. Você vai ver que muita coisa será facilitada com isso. Um exemplo disso é a qtdade de linhas que se economizou…
Mas independente disso
nao deixe jamais de estudar
=]
Eu também as vzs me confundo com esse conceito de static, mas é legal dar uma lida aqui nesse artigo.
Ve se te ajuda a entender, caso contrário, só avisar
E só pra finalizar, alguem me corriga se estiver falando algo errado mas, como o main é static , para que os métodos sejam acessíveis dentro do main, é necessário que sejam declarados como static também. Você pode fazer um teste. Se retirar o static dos métodos, o programa dará erro informando que um non-static não pode ser referenciado por um static.