user8214530
user8214530

Reputation:

I'm facing an issue with control structures

My problem is with output of my code. When I enter 20, the output must be weird, but I am getting not weird. Same with the value 18.

import java.util.Scanner;

public class conditional {

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n = sc.nextInt(); 
        String ans = "";
        if(n%2 == 1){
            ans = "Weird";
        } else {
            if(n <= 2 && n >= 5){
                ans="Not weird";
            } else if(n <= 6 && n >= 20){
                ans = "Weird";
            } else{
                ans = "Not Weird";
            }
        }
        System.out.println(ans);
    }
}

Upvotes: 0

Views: 66

Answers (3)

Jayanth
Jayanth

Reputation: 816

I have come up with two solutions and also i see a flaw:

1. if(n%2 == 1) this code can be altered to if(n%2 == 0)
2. The flaw is **(n <= 2 && n >= 5)** . No number can be <2 and >5 at the same time. Try changing that to (n <= 2 || n >= 5) and same goes for (n <= 6 && n >= 20)



import java.util.Scanner;

public class conditional {

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n = sc.nextInt(); 
        String ans = "";
        if(n%2 == 1){
            ans = "Weird";
        } else {
            if(n <= 6 || n >= 20){
                ans="Not weird";
            } else if(n <= 2 || n >= 5){
                ans = "Weird";
            } else{
                ans = "Not Weird";
            }
        }
        System.out.println(ans);
    }
}

Upvotes: 0

Przemysław Moskal
Przemysław Moskal

Reputation: 3609

In your program last else is being executed. Change && (logical AND) to || (logical OR) which will check if number is less than something OR higher than something, instead of checking if something is less or equal 5 AND higher or equal to 20 in the same time as it doesn't have a possibility to evaluate in any case.

Upvotes: 0

Ravi
Ravi

Reputation: 31417

the output must be weird,but i am getting not weird

Because, if(n%2 == 1) return false and fall to else block where

if(n <= 2 && n >= 5) is `false`

and

else if(n <= 6 && n >= 20) is also `false` 

So, again falls to else block. You probably change

if(n <= 2 && n >= 5)

to

if(n >= 2 && n <= 5)

and

else if(n <= 6 && n >= 20)

to

else if(n >= 6 && n <= 20)

Otherwise, they will never be true and always falls to else.

Upvotes: 1

Related Questions