GOOSE
GOOSE

Reputation: 11

Loop will not execute properly

I am writing a program for class and the loop seems to not execute correctly. It always returns the value for i as 0. The rest of the code seems to work as advertised, i is just not increasing in index value.

public class Day {
    String strDay;
    private int d = 0;
    private String[] Days = {"SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY"};
    String day;

    public Day() {
        return;
    }

    public Day(String strDay) {// this is my issue. I think I am going about this constructor all wrong
        for (int i = 0; i < Days.length; i++) {
            if (strDay.equalsIgnoreCase(Days[i]))
                d = i;
            return;
        }
    }

    public int getDay() {
        return d;
    }

    public void nexDay() {
        int next;
        if (d < 6) {
            next = (this.d) + 1;
            System.out.println("Next Day is :" + Days[next]);
        } else {
            next = 0;
            System.out.println("Next Day is :" + Days[next]);
        }
    }

    public void prevDay() {
        int prev = 0;

        if ((d > 0) && (d < 6)) {
            prev = (this.d) - 1;
            System.out.println("previous day is " + Days[prev]);
        } else
            System.out.println("previous day id " + Days[6]);
    }

    public int calcDay(int num) {
        int newDay;
        this.d = d + num;
        newDay = this.d % 7;
        System.out.println("calc day is" + Days[d]);
        return newDay;
    }

    public void print() {
        System.out.println("day is " + Days[d]);
    }

    public static void main(String[] args) {
        String day;
        Day Callmethod = new Day();
        Scanner console = new Scanner(System.in);
        System.out.println("enter a day of the week");
        day = console.nextLine();
        Callmethod.print();
        Callmethod.nexDay();
        Callmethod.prevDay();
        Callmethod.getDay();
    }
}

Upvotes: 1

Views: 70

Answers (3)

Azerogg
Azerogg

Reputation: 93

public Day(String strDay) {
    for (int i = 0; i < Days.length; i++) {
        if (strDay == Days[i])
            d = i;
        return;
    }
}

If I understood it clearly this will work. If not, just explain me what the goal is on that for loop. And place the return statement outisde of the next bracket.

Upvotes: 1

Gabriel Moretti
Gabriel Moretti

Reputation: 676

try change this:

public Day(String strDay)/// this is my issue. I think I am going about this constructor all wrong
  {
      for(int i=0;i<Days.length;i++){

          if (strDay.equalsIgnoreCase(Days[i]))
              d = i;
          return;

      }
  }

for this:

public Day(String strDay)/// this is my issue. I think I am going about this constructor all wrong
  {
      for(int i=0;i<Days.length;i++){
          if (strDay.equalsIgnoreCase(Days[i]))
          {
              d = i;
              return;
          }

      }
  }

Without the curly braces your conditional block will be only the next line of code. So your loop was only running once

Upvotes: 1

Elliott Frisch
Elliott Frisch

Reputation: 201447

Well, this

 Day Callmethod = new Day();

is calling your empty constructor. Not your constructor with a loop (which takes a String). Also, Java variables start with a lower case letter (Callmethod looks like a class). I think you were looking for something like

 Day day = new Day("SUNDAY");

Also, your if needs braces or the return will be invoked without doing anything (unless it matches on the first entry) like

for(int i=0;i<Days.length;i++){
    if (strDay.equalsIgnoreCase(Days[i])) {
      d = i;
      return;
    }
 }

Upvotes: 3

Related Questions