2015-03-01 5 views
1

Это только часть кода. Поэтому по какой-то причине, когда я пытаюсь запустить это, и значения находятся в допустимых пределах, я получаю «Недопустимый вес!». но он не должен делать это как заявление else.switch, if-else и math

Итак ... Я выбираю 1 как выбор, который я хочу, где я должен ввести возраст в месяцах и вес в кг. возраст должен составлять от 0 до 24 месяцев. Вес должен составлять от 2 до 15 кг.

If weight(kg) >= (age(months))/3 + 2 and 
    weight(kg) <= (5*age(months))/12 + 5... 

Я хочу распечатать «Здоровый». Если не с этим диапазоном - не здоровым.

System.out.println("(1) months then weight in kg"); 

Scanner input = new Scanner(System.in); 
System.out.print("Enter a number: "); 
int selection = input.nextInt(); 
switch(selection){ 
case 1: 
    System.out.println("Enter age in months: "); 
    double month = input.nextDouble(); 
    if(month >= 0 && month <= 24){ 
     System.out.println("Enter a weight in kg: "); 
    } else{ 
     System.out.println("Not a baby anymore"); 
     System.exit(0);  
    } 
    double weight = input.nextInt(); 
    if(weight >= 2 && weight <= 15 && weight >= (month/3) +2 && weight <= ((5 * month)/12) +5) { 
     System.out.println("Healthy!"); 
    } else if(weight <= (month/3) +2 && weight >= ((5 * month)/12) +5) { 
     System.out.println("Not Healthy!"); 
    } else{ 
     System.out.println("Invalid Weight!"); 
    } 
    break; 

... 
} 
+0

Вы не можете получать ввод правильно. Распечатайте весовую переменную и посмотрите, действительно ли это реальная ценность, а не какой-то мусор. Кроме того, вы используете 'input.nextInt()', но вы устанавливаете 'weight' как' double'. Сохраняйте свои типы данных. –

+0

Какая серия входов вам не подходит? – Mureinik

+0

Тип данных был усталой ошибкой с моей стороны. Имея или условие, исправил мою проблему. Thx –

ответ

0

Ваш

} else if(weight <= (month/3) +2 && weight >= ((5 * month)/12) +5) { 

часть неправильна, так как эти два условия не могут быть оба истинны (например, если month является 6, вы получаете weight <= 4 && weight >= 7.5, который является ложным для любого weight), так если условие для печати "Healthy!" является ложным, вы всегда будете обращаться к заявлению else и распечатать "Invalid Weight!".

Вы, вероятно, хотите, по крайней мере один из них, чтобы быть правдой (т.е. условие OR):

} else if(weight <= (month/3) +2 || weight >= ((5 * month)/12) +5) { 
+0

Это была моя проблема, большое вам спасибо! Я только начинаю с java, и я усталый студент колледжа. Я полностью пропустил это. Имея или условие исправил мою проблему! –

0
import java.util.Scanner; 


public class Test { 

public static void main(String[] args) { 
    System.out.println("(1) months then weight in kg"); 

     Scanner input = new Scanner(System.in); 
     System.out.print("Enter a number: "); 
     int selection = input.nextInt(); 
     switch(selection){ 
      case 1: 
        System.out.println("Enter age in months: "); 
      double month = input.nextDouble(); 
       if(month >= 0 && month <= 24){ 
        System.out.println("Enter a weight in kg: "); 
       } else{ 
        System.out.println("Not a baby anymore"); 
        System.exit(0);  
       } 
      double weight = input.nextInt(); 
       if((weight >= 2) &&(weight <= 15)&&(weight >= (month/3) +2)&& (weight <= ((5 * month)/12) +5)) { 
        System.out.println("Healthy!"); 
       } else if((weight <= (month/3) +2)&& (weight >= ((5 * month)/12) +5)) { 
        System.out.println("Not Healthy!"); 
       } else{ 
        System.out.println("Invalid Weight!"); 
       } 
       break; 

     } 
    } 
} 

Выход:

/******execution in eclipse************/ 
/* 
(1) months then weight in kg 
Enter a number: 1 
Enter age in months: 
0 
Enter a weight in kg: 
3 
Healthy! 
*/ 
+0

всегда помещают некоторые круглые скобки с логическими операторами; –

Смежные вопросы