简体   繁体   中英

Missing Return Statement Error w/ For Loop - JAVA

I get a missing return statement error on the last bracket and I have no idea why. This method basically takes in a string that corresponds to the students course and the current survey question they are on. The outer if statements correspond to the subject (eg: math, science, english...). The for loop iterates through an array and matches the user input ("US History") with a string in an array list. If they are equal, it returns the index at which it was found. Else, it continues the for loop. The method returns an int, but I still get an error on the last bracket. PLEASE HELP!

 public static int findNumber(String course, int currentQuestion) {
    String newCourse = course.toLowerCase();

    if (RateDriver.levelText.equals("math")) {
      for (int i = 0; i < RateSurvey.math.length-1;i++) {
        if (newCourse.equals(RateSurvey.math[i])) return survey[currentQuestion][i];
      }
      return 100;
    }

    else if (RateDriver.levelText.equals("science")) {
      for (int i = 0; i < RateSurvey.science.length-1;i++) {
        if (newCourse.equals(RateSurvey.science[i])) return survey[currentQuestion][i];

      }
      return 100;
    }
    else if (RateDriver.levelText.equals("english")) {
      for (int i = 0; i < RateSurvey.english.length-1;i++) {
        if (newCourse.equals(RateSurvey.english[i])) return survey[currentQuestion][i];

      }
      return 100;
    }
    else if (RateDriver.levelText.equals("social studies")) {
      for (int i = 0; i < RateSurvey.social.length-1;i++) {
        if (newCourse.equals(RateSurvey.social[i]))  return survey[currentQuestion][i];
      }
    }
    else if (RateDriver.levelText.equals("art")) {
      for (int i = 0; i < RateSurvey.art.length-1;i++) {
        if (newCourse.equals(RateSurvey.art[i])) return survey[currentQuestion][i];
      }
      return 100;
    }
    else if (RateDriver.levelText.equals("pe")) {
      for (int i = 0; i < RateSurvey.pe.length-1;i++) {
        if (newCourse.equals(RateSurvey.pe[i])) return survey[currentQuestion][i];
      }
    }
    else if (RateDriver.levelText.equals("chinese")) {
      for (int i = 0; i < RateSurvey.chinese.length-1;i++) {
        if (newCourse.equals(RateSurvey.chinese[i])) return survey[currentQuestion][i];
      }
    }
    else if (RateDriver.levelText.equals("japanese")) {
      for (int i = 0; i < RateSurvey.japanese.length-1;i++) {
        if (newCourse.equals(RateSurvey.japanese[i])) return survey[currentQuestion][i];
      }
      return 100;
    }
    else if (RateDriver.levelText.equals("french")) {
      for (int i = 0; i < RateSurvey.french.length-1;i++) {
        if (newCourse.equals(RateSurvey.french[i])) return survey[currentQuestion][i];
      }
      return 100;
    }
    else if (RateDriver.levelText.equals("spanish")) {
      for (int i = 0; i < RateSurvey.spanish.length-1;i++) {
        if (newCourse.equals(RateSurvey.spanish[i])) return survey[currentQuestion][i];
      }
      return 100;
    }
    else if (RateDriver.levelText.equals("hawaiian")) {
      for (int i = 0; i < RateSurvey.hawaiian.length-1;i++) {
        if (newCourse.equals(RateSurvey.hawaiian[i])) return survey[currentQuestion][i];
      }
      return 100;
    }
    else return 100;

  **}** // this is where I get the error

Some of the parts of your code don't return anything if nothing is returned in the for loop, such as this one:

else if (RateDriver.levelText.equals("social studies")) {
  for (int i = 0; i < RateSurvey.social.length-1;i++) {
    if (newCourse.equals(RateSurvey.social[i]))  return survey[currentQuestion][i];
  }
}

So if the program reaches this part of the code and doesn't end up returning survey[currentQuestion][i] , then it will skip to the end of the if-else chain and not return anything. You should change them to something like this:

else if (RateDriver.levelText.equals("social studies")) {
  for (int i = 0; i < RateSurvey.social.length-1;i++) {
    if (newCourse.equals(RateSurvey.social[i]))  return survey[currentQuestion][i];
  }
  return 100;
}

Just remove the else before the last return 100; That means it will happen for every case that isn't handle by the huge if statement. It may be the same thing, but it just makes the code clearer.

You need to add an additional bracket after the one that is getting you an error.

The following doesn't get any compiling errors:

public static int findNumber(String course, int currentQuestion) {
            String newCourse = course.toLowerCase();

            if (RateDriver.levelText.equals("math")) {
              for (int i = 0; i < RateSurvey.math.length-1;i++) {
                if (newCourse.equals(RateSurvey.math[i])) return survey[currentQuestion][i];
              }
              return 100;
            }

            else if (RateDriver.levelText.equals("science")) {
              for (int i = 0; i < RateSurvey.science.length-1;i++) {
                if (newCourse.equals(RateSurvey.science[i])) return survey[currentQuestion][i];

              }
              return 100;
            }
            else if (RateDriver.levelText.equals("english")) {
              for (int i = 0; i < RateSurvey.english.length-1;i++) {
                if (newCourse.equals(RateSurvey.english[i])) return survey[currentQuestion][i];

              }
              return 100;
            }
            else if (RateDriver.levelText.equals("social studies")) {
              for (int i = 0; i < RateSurvey.social.length-1;i++) {
                if (newCourse.equals(RateSurvey.social[i]))  return survey[currentQuestion][i];
              }
            }
            else if (RateDriver.levelText.equals("art")) {
              for (int i = 0; i < RateSurvey.art.length-1;i++) {
                if (newCourse.equals(RateSurvey.art[i])) return survey[currentQuestion][i];
              }
              return 100;
            }
            else if (RateDriver.levelText.equals("pe")) {
              for (int i = 0; i < RateSurvey.pe.length-1;i++) {
                if (newCourse.equals(RateSurvey.pe[i])) return survey[currentQuestion][i];
              }
            }
            else if (RateDriver.levelText.equals("chinese")) {
              for (int i = 0; i < RateSurvey.chinese.length-1;i++) {
                if (newCourse.equals(RateSurvey.chinese[i])) return survey[currentQuestion][i];
              }
            }
            else if (RateDriver.levelText.equals("japanese")) {
              for (int i = 0; i < RateSurvey.japanese.length-1;i++) {
                if (newCourse.equals(RateSurvey.japanese[i])) return survey[currentQuestion][i];
              }
              return 100;
            }
            else if (RateDriver.levelText.equals("french")) {
              for (int i = 0; i < RateSurvey.french.length-1;i++) {
                if (newCourse.equals(RateSurvey.french[i])) return survey[currentQuestion][i];
              }
              return 100;
            }
            else if (RateDriver.levelText.equals("spanish")) {
              for (int i = 0; i < RateSurvey.spanish.length-1;i++) {
                if (newCourse.equals(RateSurvey.spanish[i])) return survey[currentQuestion][i];
              }
              return 100;
            }
            else if (RateDriver.levelText.equals("hawaiian")) {
              for (int i = 0; i < RateSurvey.hawaiian.length-1;i++) {
                if (newCourse.equals(RateSurvey.hawaiian[i])) return survey[currentQuestion][i];
              }
              return 100;
            }
            else return 100;

          }
        } //ADDED

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM