Desenvolvi este código para identificar se 4 números digitados por um usuário está em ordem decrescente ou em ordem crescente, mas quando eu coloco como entrada 4 3 2 1 ele da como saída “FORA DE ORDEM”, quando devia aparecer “DECRESCENTE”. O que devo fazer para que apareça a saída correta?
public static void main(String[] args) {
// TODO code application logic here
Scanner sc = new Scanner(System.in);
int num1;
int num2;
int num3;
int num4;
int media;
System.out.println("Informe 4 numeros: ");
num1 = sc.nextInt();
num2 = sc.nextInt();
num3 = sc.nextInt();
num4 = sc.nextInt();
media = (num1+num2+num3+num4 )/4;
boolean decrescente = num1>num2 && num2>num3 && num3>num4;
boolean crescente = num1<num2 && num2<num3 && num3<num4;
if(crescente){
System.out.println("Esta em ordem CRESCENTE!!! E a média é: "+media);
}else if(decrescente){
System.out.println("Esta em ordem DECRESCENTE!!! E a média é: "+media);
}else{
System.out.println("Esta FORA DE ORDEM!!! E a média é: "+media);
}
}
A classe Scanner do java tem um pequeno bug quando se “puxa” números inteiros ou flutuantes, pegando do buffer a próxima entrada, gerando erros comportamentais, tente isso e veja se persiste…
num1 = sc.nextInt();
sc.nextLine();
num2 = sc.nextInt();
sc.nextLine();
num3 = sc.nextInt();
sc.nextLine();
num4 = sc.nextInt();
sc.nextLine();
Ou então pegue cada entrada como String e converta para inteiro assim (obs: o bloco todo deve estar num try/catch)…
num1 = Integer.parseInt(sc.nextLine());
num2 = Integer.parseInt(sc.nextLine());
num3 = Integer.parseInt(sc.nextLine());
num4 = Integer.parseInt(sc.nextLine());
int[] num = new int[4];
Scanner input = new Scanner(System.in);
public void numeros(){
for(int i = 0; i < num.length; i++){
System.out.println("Digite o valor de "+ i);
num[i] = Integer.parseInt(input.nextLine());
}
double media =(num[0]+num[1]+num[2]+num[3])/4;
boolean crescente = num[0]<num[1]&&num[1]<num[2]&&num[2]<num[3];
boolean decrescente = num[0]>num[1]&&num[1]>num[2]&&num[2]>num[3];
if(crescente){
System.out.println("Esta em ordem CRESCENTE!!! E a média é: "+media);
}else if(decrescente){
System.out.println("Esta em ordem DECRESCENTE!!! E a média é: "+media);
}else{
System.out.println("Esta FORA DE ORDEM!!! E a média é: "+media);
}
}