Thái Trà
Thái Trà

Reputation: 73

About The switch Statement in Java

I'm still learning. Today I have a question in SoloLearn, into The switch Statement lesion:

int day = 3;

switch(day) {
  case 1:
    System.out.println("Monday");
    break;
  case 2:
    System.out.println("Tuesday");
    break;
  case 3:
    System.out.println("Wednesday");
    break;

// Outputs "Wednesday"

and I thinks, I can have a example to remember about input and switch Statement: I want input a number, and 1 as Monday, 2 as Tuesday.... to 7 as Sunday, and repeat: 8 as Monday, 9 as Tuesday.... This is my code:

import java.util.Scanner;

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


        if (day.nextInt()>7){
            day.nextInt()=day.nextInt()%7;
        }

    switch(day.nextInt()){
        case 1 :
            System.out.println("Monday");
            break;
        case 2:
            System.out.println("Tuesday");
            break;
        case 3:
            System.out.println("Wednesday");
            break;
        case 4:
            System.out.println("Thursday");
            break;
        case 5:
            System.out.println("Friday");
            break;
        case 6: 
            System.out.println("Saturday");
            break;
        case 0: 
            System.out.println("Sunday");
        case 7:
            System.out.println("Sunday");
            break;

        }
    }
}

and error. My knowledge's not enough to fix this thing (I think so, because i'm a newbie and still learning). Can you expand for me, fix this thing and thanks for teach! Have fun!

Upvotes: 1

Views: 625

Answers (7)

Nelson Colon
Nelson Colon

Reputation: 31

You could solve this by creating an int value to set the input for day as day.nextInt() then you can do the math in the created variable and make the switch depending on that value, this should work:

   Scanner day = new Scanner(System.in);
    int dayVal = day.nextInt();

    if (dayVal>7){
        dayVal %= 7;
    }

    switch(dayVal){
        case 1 :
        System.out.println("Monday");
        break;
    case 2:
        System.out.println("Tuesday");
        break;
    case 3:
        System.out.println("Wednesday");
        break;
    case 4:
        System.out.println("Thursday");
        break;
    case 5:
        System.out.println("Friday");
        break;
    case 6:
        System.out.println("Saturday");
        break;
    case 0:
        System.out.println("Sunday");
        break;
    }
}

As said before, you need to change 7 to 0 because you will never have a residue of 0, therefore you will never get a Sunday

Upvotes: 0

shoaib30
shoaib30

Reputation: 975

You need to use nextInt() once to get the input and store it in a variable. Every time you call nextInt() it would look for the next integer value entered.

Scanner day = new Scanner(System.in);

int dayInput = day.nextInt();
    if (dayInput>7){
        dayInput=dayInput%7;
    }

switch(dayInput){
    case 1 :
        System.out.println("Monday");
        break;
    case 2:
        System.out.println("Tuesday");
        break;
    case 3:
        System.out.println("Wednesday");
        break;
    case 4:
        System.out.println("Thursday");
        break;
    case 5:
        System.out.println("Friday");
        break;
    case 6: 
        System.out.println("Saturday");
        break;
    case 0: 
        System.out.println("Sunday");
    case 7:
        System.out.println("Sunday");
        break;

}

Upvotes: 0

Sanchit Patiyal
Sanchit Patiyal

Reputation: 4920

As mentioned by @kolosy You are missing a break statement below case 0 and by writing day.nextInt() four times, you are actually asking the user to enter four times. Also you cant day.nextInt()=day.nextInt()%7; do this. By doing it you're trying to assign a value back to the method call Change your code of main function to this

        Scanner day = new Scanner(System.in);
        int enteredDay = day.nextInt();

        if (enteredDay > 7) {
            enteredDay = enteredDay % 7;
        }

        switch (enteredDay) {
        case 1:
            System.out.println("Monday");
            break;
        case 2:
            System.out.println("Tuesday");
            break;
        case 3:
            System.out.println("Wednesday");
            break;
        case 4:
            System.out.println("Thursday");
            break;
        case 5:
            System.out.println("Friday");
            break;
        case 6:
            System.out.println("Saturday");
            break;
        case 0:
            System.out.println("Sunday");
            break;
        case 7:
            System.out.println("Sunday");
            break;

        }

Upvotes: 2

gtosto
gtosto

Reputation: 1341

NextInt() is a method .. you can't assign it a value

Upvotes: 0

kolosy
kolosy

Reputation: 3099

You are missing a break statement below case 0. Java does not allow label fall-through like some other languages.

Also - you should be checking for your number being >= 7, not >7, or you'll never get a 0 on the second week. 8 % 7 is 1

Upvotes: 0

jsheeran
jsheeran

Reputation: 3037

The problem is here:

    if (day.nextInt()>7){
        day.nextInt()=day.nextInt()%7;
    }

You're trying to assign a value back to the method call day.nextInt(), which you can't do. Instead, try something like the following:

int dayNum = day.nextInt() % 7;

Also, your switch includes a case for dayNum == 7, which will never be the case.

Upvotes: 5

Lalit Verma
Lalit Verma

Reputation: 802

Add break after case 0:

            case 6: 
                System.out.println("Saturday");
                break;
            case 0: 
                System.out.println("Sunday");
              break;

If the value in switch() goes beyond 7 than you will get error as you have not provided any default case here. You can either do something like number%7to get the value always in case range.

Upvotes: 0

Related Questions