提问人:Eric Karaeen 提问时间:12/30/2021 更新时间:12/30/2021 访问量:103
索引越界,java
Index out of bound, java
问:
我有一个关于数组中索引越界错误的问题。 我想创建一个方法,该方法将月和日作为参数并返回一年中的某一天。如果任何参数不正确,则该方法应返回 0。
例如,如果方法收到 2 和 3,即 2 月 3 日,则它必须返回 34。如果它收到 12 和 31,则必须返回 365。 但是我遇到了索引越界的问题,无法解决任何提示。 这是我的代码。
公共类 CalendarMethods {
public static int dayInYear(int month, int day){
int[] daysInMonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int yearCalculation = 0;
int monthCalculation = 0;
for (int j = 0; j < month-1; j++) {
monthCalculation = monthCalculation + daysInMonth[j];
}
yearCalculation = monthCalculation + day;
if (month <= 0 ) {
yearCalculation = 0;
}
if (month >= 13){
yearCalculation = 0;
}
return yearCalculation;
}
}
答:
0赞
Yahli Gitzi
12/30/2021
#1
您应该在循环前的一个月进行边界检查。解决方法是:
public class CalendarMethods {
public static int dayInYear(int month, int day){
int[] daysInMonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int yearCalculation = 0;
int monthCalculation = 0;
if (month > 0 && month < 13) {
if (day > 0 && day <= daysInMonth[month - 1]) { // extra: check if entered day makes sense
for (int j = 0; j < month-1; j++) {
monthCalculation = monthCalculation + daysInMonth[j];
}
yearCalculation = monthCalculation + day;
}
}
return yearCalculation;
}
}
0赞
Daniel Kiptoon
12/30/2021
#2
对于函数,始终首先进行健全性检查,以确保您获得的输入符合您的期望,在这种情况下,我们预计月份值介于 1 和 12 之间,因此与您的实现相同,但在处理其余代码之前检查输入。这样可以避免意外/错误输入的异常。
public static int dayInYear(int month, int day){
if (month <= 0||month >= 13 ) {
return 0;
}
int[] daysInMonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int yearCalculation = 0;
int monthCalculation = 0;
for (int j = 0; j < month-1; j++) {
monthCalculation = monthCalculation + daysInMonth[j];
}
yearCalculation = monthCalculation + day;
return yearCalculation;
}
评论
0赞
Eric Karaeen
12/31/2021
哟,谢谢大家,将开始更多地使用此页面。惊人的帮助。将永远记住理智检查。
评论