0

So first off, I'm completely brand new to Java and I know this is probably really easy for most of you. But right now I'm stuck with an exercise. I have googled almost frantically, but I can't find any helpful tips to this particular problem. That or I don't really know what to search for.

I have a piece of code that looks like this:

import java.util.Scanner;

public class Week {

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

System.out.println("Type a number: ");
int day = input.nextInt();

if (day == 1) {
  System.out.println("Monday ");
}
if (day == 2) {
  System.out.println("Tuesday ");
}
if (day == 3) {
  System.out.println("Wednesday ");
}
if (day == 4) {
  System.out.println("Thursday ");
}
if (day == 5) {
  System.out.println("Friday ");
}
if (day == 6) {
  System.out.println("Saturday ");
}
if (day == 7) {
  System.out.println("Sunday");
}

} }

As all you can probably see, this program prompts the user to type a number, and if that number is somewhere between 1-7 the program will answer with the corresponding day of the week. What I would like to do now however, is to modify the code to start a counter or loop or something. I want to make it count +1 from my input number to a specified break. Let's say I type 2, and the program would print: Tuesday, Wednesday, Thursday, Friday and then make it stop.

I have only really dipped my toe in for, while, if statements etc but I know that somewhere there is the key. While playing around I only succeeded in making the program print 2 five times, or letting me type numbers for infinity.

Any help would be greatly appreciated!

  • `Let's say I type 2, and the program would print: Tuesday, Wednesday, Thursday, Friday and then make it stop.` - Why only up to `Friday`, not up to `Sunday`? – Arvind Kumar Avinash Oct 21 '20 at 21:34
  • That's the point, I want to specify when the program will stop a loop of the days I want to loop. If I run the program in the form it is now, I could type 4 and it would answer: "Thursday". What I would like to do is to have a program where I would type 1, and it would answer with a loop of all my if-statements: "Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday. Do you understand now? And I would like to test breaks as well, so I could make it stop at let's say 4 instead of going through all 7 –  Oct 21 '20 at 21:53
  • JavaBoy - Yes, I've understood your requirement and written my answer in a way which will help you understand basics with an example. You can provide your feedback as a comment below the answer. – Arvind Kumar Avinash Oct 21 '20 at 22:33

4 Answers4

1

Since you are currently learning, I'll point you some leads to brighten the path to follow instead of giving the answer.

First of all to solve a problem, you have to clearly define what it is. We will assume that numbers bellow 1 or higher than 7 are not in scope. I understand that you need to enter two numbers : the starting day and the end day. You already know how to store the first one. The second one is the same process. But there is a catch. Scanner.nextInt() consumes the number entered in the console but not the you do to validate the value. You have to find how to consume that between the two nextInt() calls.

Then loops. A loop shall be :

  1. an initialization : what is the state of the program when the loops begin (use the start day value since it is the first thing to display)
  2. a condition to loop : when does the loop stops ? (use the end day value maybe +1 since it is the last one to display)
  3. an evolution instruction : every time the loop is performed something shall progress to make your program state go closer and closer to the end loop condition (+1 every loop since you want all days between start and end)

Go further :

  • I advise you to look at switch cases to avoid chained if statements that perform a discrimination on a given set of values on one variable
  • Later, you could look at enums. It is a way to store finite states and week Days clearly is one good exemple to learn them. (of cours they already exist -> https://kodejava.org/how-do-i-use-the-java-time-dayofweek-enum/)
FlorentB
  • 11
  • 2
0
public class Week {

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

        System.out.println("Type a number: ");
        int day = input.nextInt();
        
        System.out.println("Type a stop number: ");
        int stopDay = input.nextInt();

        for (int i = day; i <= stopDay; i++) {      // if the stopday should be printed, then use '<=', '<' otherwise
            printWeekDay(i);
        }
    }
    
    private static void printWeekDay(int day) {
        if (day == 1) {
            System.out.println("Monday ");
        }
        if (day == 2) {
            System.out.println("Tuesday ");
        }
        if (day == 3) {
            System.out.println("Wednesday ");
        }
        if (day == 4) {
            System.out.println("Thursday ");
        }
        if (day == 5) {
            System.out.println("Friday ");
        }
        if (day == 6) {
            System.out.println("Saturday ");
        }
        if (day == 7) {
            System.out.println("Sunday");
        }
    }
}
Hias
  • 59
  • 3
0

You could just create an array of DAYS[] and iterate through the array from that particular index towards the end.

String DAYS[] = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};

System.out.println("Type a number: ");
int day = input.nextInt();

if(day >= 1 && day <= 7) {
  for(int i = day - 1; i < DAYS.length; i++) {
      System.out.println(DAYS[i]);
   }
}
else
   System.out.println("Enter a valid number");

The logic would be the same if you want to stop by taking in the stop index. Just replace the DAYS.length in the for loop with your desired stop index

p_flame
  • 72
  • 6
0

I would do it using switch-case in which when I want the program to print a specific day, I would use break which break the switch-case block after executing the matching case. If break is not used in a case, the execution falls through the remaining cases until a break is found or where the block ends.

In order to continue doing it repeatedly, I would use an infinite loop (while(true) { }) which can be broken using break statement as per the business logic.

Note that I have also used Integer.parseInt(input.nextLine()) instead of input.nextint() to avoid the problem described here.

Demo:

import java.util.Scanner;

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

        System.out.println("+=+=+ Menu +=+=+");
        System.out.println("A. Show a specific day");
        System.out.println("B. Show all days starting from the specific day");
        System.out.println("C. Exit");
        String choice;
        while (true) {
            System.out.print("Enter your choice: ");
            choice = input.nextLine().toUpperCase();
            if ("C".equals(choice)) {
                System.out.println("Good bye!");
                break;
            }

            System.out.print("Type a number: ");
            int day = Integer.parseInt(input.nextLine());

            if ("A".equals(choice)) {
                switch (day) {
                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 7:
                    System.out.println("Sunday");
                    break;
                }
            } else if ("B".equals(choice)) {
                switch (day) {
                case 1:
                    System.out.println("Monday ");
                case 2:
                    System.out.println("Tuesday ");
                case 3:
                    System.out.println("Wednesday ");
                case 4:
                    System.out.println("Thursday ");
                case 5:
                    System.out.println("Friday ");
                case 6:
                    System.out.println("Saturday ");
                case 7:
                    System.out.println("Sunday");
                }
            }
        }
    }
}

A sample run:

+=+=+ Menu +=+=+
A. Show a specific day
B. Show all days starting from the specific day
C. Exit
Enter your choice: A
Type a number: 4
Thursday 
Enter your choice: B
Type a number: 4
Thursday 
Friday 
Saturday 
Sunday
Enter your choice: C
Good bye!
Arvind Kumar Avinash
  • 50,121
  • 5
  • 26
  • 72