Home > front end >  My "Else If" Code Isn't Working As Expected
My "Else If" Code Isn't Working As Expected

Time:10-04

I am a new coder. Working on an assignment. This is also my first post here so I apologize if it's a little sloppy.

I'm having some troubles with my if/else statements in Java...the "if" conditions seem to work okay. But my "else" conditions do not. Take a look at the code and the build results below.

Basically, I enter an ingredient. And then I put in the number of cups needed. And the number of calories the ingredient has per x cup. That all seems to work as long as I input what I want to for "successful" results.

Successful Build Image

But when I start to input values outside of my criteria, my application doesn't seem to care. If I input 0, I should get that output of "your response is invalid" or whatever it is I coded. But it just seems to skip over that entirely.

Bad Code Image

package recipe_collection_manager;

import java.util.Scanner;

public class Ingredient {


    public static void main(String[] args) {
        Scanner scnr = new Scanner(System.in);

        //Initializes the variables

        String nameOfIngredient = "";
        int numberCups = 0;
        int numberCaloriesPerCup = 0;
        int totalCaloriesPerCup = 0;
        double totalCalories = 0.0;

// Enter the name of the ingredient.

        System.out.println("Please enter the name of the ingredient: ");
        nameOfIngredient = scnr.next();

        // Enter the number of cups needed for the ingredient.
        // If Else statements used to establish if the number of cups is valid.

        System.out.println("Please enter the number of cups of "
                  nameOfIngredient   " we'll need. The number of cups must be between 1 and 100: ");
        numberCups = scnr.nextInt();

        if (numberCups >= 1 || numberCups <= 100) {
            System.out.println("The number of cups is valid.");
        } else if (numberCups <= 1 || numberCups >= 100) {
            System.out.println("The number you have entered is invalid.  Please try again.");
        }

        // Enter the number of calories used per cup.
        // If Else statements are used to establish if the number of calories is valid.

        System.out.println("Please enter the number of calories per cup: ");
        numberCaloriesPerCup = scnr.nextInt();

        if (numberCaloriesPerCup >= 1 || numberCaloriesPerCup <= 1000) {
            System.out.println("The number of calories is valid.");
        } else if (numberCaloriesPerCup <= 1 || numberCaloriesPerCup >= 1000) {
            System.out.println("The number you have entered is invalid.  Please try again.");
        }

        // Calculation for totalCalories based on numberCups and numberCaloriesPerCup

        if (numberCups > 0 && numberCaloriesPerCup > 0) {
            totalCalories = numberCups * numberCaloriesPerCup;
        }

        System.out.println(nameOfIngredient   " uses "   numberCups
                  " cups and has "   totalCalories   " calories.");

    }
}

CodePudding user response:

Problem was in line:

 if (numberCups >= 1 || numberCups <= 100) {
 ...
 }

When you entered 0, program checked if 0 is greater or equal to 1, and that was false but you had also "or" condition ( || ), and in that condition you were checking if 0 <= 100 and because that is true, false || true gives true and that's why your if statement was correct. You needed to use "and" ( && ) instead of "or". There was flaw in your logic.

Test code below, it should work now:

package recipe_collection_manager;
    
    import java.util.Scanner;
    
    public class Ingredient {
    
    
        public static void main(String[] args) {
            Scanner scnr = new Scanner(System.in);
    
            //Initializes the variables
    
            String nameOfIngredient = "";
            int numberCups = 0;
            int numberCaloriesPerCup = 0;
            int totalCaloriesPerCup = 0;
            double totalCalories = 0.0;
    
    // Enter the name of the ingredient.
    
            System.out.println("Please enter the name of the ingredient: ");
            nameOfIngredient = scnr.next();
    
            // Enter the number of cups needed for the ingredient.
            // If Else statements used to establish if the number of cups is valid.
    
            System.out.println("Please enter the number of cups of "
                      nameOfIngredient   " we'll need. The number of cups must be between 1 and 100: ");
            numberCups = scnr.nextInt();
    
            if (numberCups >= 1 && numberCups <= 100) {
                System.out.println("The number of cups is valid.");
            } else if (numberCups <= 1 || numberCups >= 100) {
                System.out.println("The number you have entered is invalid.  Please try again.");
            }
    
            // Enter the number of calories used per cup.
            // If Else statements are used to establish if the number of calories is valid.
    
            System.out.println("Please enter the number of calories per cup: ");
            numberCaloriesPerCup = scnr.nextInt();
    
            if (numberCaloriesPerCup >= 1 || numberCaloriesPerCup <= 1000) {
                System.out.println("The number of calories is valid.");
            } else if (numberCaloriesPerCup <= 1 || numberCaloriesPerCup >= 1000) {
                System.out.println("The number you have entered is invalid.  Please try again.");
            }
    
            // Calculation for totalCalories based on numberCups and numberCaloriesPerCup
    
            if (numberCups > 0 && numberCaloriesPerCup > 0) {
                totalCalories = numberCups * numberCaloriesPerCup;
            }
    
            System.out.println(nameOfIngredient   " uses "   numberCups
                      " cups and has "   totalCalories   " calories.");
    
        }
    }

CodePudding user response:

Just to clarify. The following statement

if(numberCups >= 1 || numberCups <= 100) {
...
}

Is true any number of cups. Any number of cups >= 1 will be caught by the first condition. Any number of cups <= 0 will be caught by the second condition since in that case they will all be less than 100. With a logical || only one condition is required to be true for the statement to be true.

In fact,

if(numberOfCups is >= A || numberOfCups <= B) {
...
}

will always be true as long as B >= A-1.

CodePudding user response:

if (numberCups >= 1 || numberCups <= 100) {
 ...
 }

So, here you see, 0 is not bigger than 1, but it is smaller than 100. See the problem now? So, use && in place for || if you want to code more than 1 but less than 100.

  •  Tags:  
  • java
  • Related