Java 数组索引超出边界异常:12
这段代码非常简单,但我就是不能让它工作。它一直说数组在第8行(while循环)超出边界,我不知道为什么,因为Java 数组索引超出边界异常:12,java,Java,这段代码非常简单,但我就是不能让它工作。它一直说数组在第8行(while循环)超出边界,我不知道为什么,因为u每次都会重置。有什么想法吗?这可能是一个简单的解决方案,但感谢您的帮助 public class potato { public static void main(String[] args) { int year; int day = (int)((System.currentTimeMillis() + java.util.TimeZone.g
u
每次都会重置。有什么想法吗?这可能是一个简单的解决方案,但感谢您的帮助
public class potato {
public static void main(String[] args) {
int year;
int day = (int)((System.currentTimeMillis() + java.util.TimeZone.getDefault().getRawOffset()) / 1000.0 / 60.0 / 60.0 / 24.0);
int[] months = {31,28,31,30,31,30,31,31,30,31,30,31};
int u;
for (year = 1970; year < 2018; year++) {
u = 0;
while (day > months[u] && u < 12) {
day -= months[u];
u++;
}
}
}
}
公共类{
公共静态void main(字符串[]args){
国际年;
int day=(int)((System.currentTimeMillis()+java.util.TimeZone.getDefault().getRawOffset())/1000.0/60.0/60.0/24.0);
int[]月={31,28,31,30,31,30,31,31,30,31,30,31};
国际大学;
对于(年份=1970;年份<2018;年份++){
u=0;
而(日>月[u]&&u<12){
日-=月[u];
u++;
}
}
}
}
在检查天数之前检查变量u的值。将while循环条件更改为
while ( u < 12 && day > months[u] )
while(u<12&&day>months[u])
在检查天数之前检查变量u的值。将while循环条件更改为
while ( u < 12 && day > months[u] )
while(u<12&&day>months[u])
如果你仔细看这里
u = 0;
while (day > months[u] && u < 12) {
day -= months[u];
u++;
}
u=0;
而(日>月[u]&&u<12){
日-=月[u];
u++;
}
当递增数组时,实际上是在访问while循环头中的数组。它会再次测试数组,这会导致月[12]
超出范围
与前面的答案类似,当您说
while(ummonths[u])
时,它使用短路测试方法。因此,当u==12
时,它会立即取消进入循环,也会取消第二个条件的测试。如果您仔细看这里
u = 0;
while (day > months[u] && u < 12) {
day -= months[u];
u++;
}
int monthsLength = months.length()-1;
// So it contains 0-11 index values
u=0;
而(日>月[u]&&u<12){
日-=月[u];
u++;
}
当递增数组时,实际上是在访问while循环头中的数组。它会再次测试数组,这会导致月[12]
超出范围
与前面的答案类似,当您说
while(ummonths[u])
时,它使用短路测试方法。因此,当u==12
时,它会立即取消进入循环,并取消测试第二个条件。这是因为您的while条件
int monthsLength = months.length()-1;
// So it contains 0-11 index values
//但在你的情况下,它检查12个索引
月[u]。这将抛出索引越界异常。
请将while条件修改为:
而(日>月[u]&月<月长)
我希望这能奏效 这是因为您的while状况
int monthsLength = months.length()-1;
// So it contains 0-11 index values
//但在你的情况下,它检查12个索引
月[u]。这将抛出索引越界异常。
请将while条件修改为:
而(日>月[u]&月<月长)
我希望这能奏效 也许这不是奎斯顿的答案,但是。我已经看过这个代码示例,并且有一些注释
date
时,强烈建议使用特殊类:Calendar
或YodaTime
System.currentTimeMillis()
ret在当前时间和1970年1月1日UTC午夜之间运行毫秒:因此不清楚为什么在代码中使用1970
public static int getDays(int yearFrom, int yearTo) {
Calendar calendar = Calendar.getInstance();
int days = getTotalDays(yearFrom, yearTo, calendar);
for (int year = yearFrom; year < yearTo; year++) {
calendar.set(Calendar.YEAR, year);
for (int month = Calendar.JANUARY; month <= Calendar.DECEMBER; month++) {
calendar.set(Calendar.MONTH, month);
int maxDayOfMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
if (days <= maxDayOfMonth)
break;
days -= maxDayOfMonth;
}
}
return days;
}
private static int getTotalDays(int yearFrom, int yearTo, Calendar calendar) {
calendar.set(Calendar.DAY_OF_MONTH, 1);
int days = 0;
for (int year = yearFrom; year < yearTo; year++) {
calendar.set(Calendar.YEAR, year);
days += calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
}
return days;
}
public static int getDays(int yearFrom,int yearTo){
日历=Calendar.getInstance();
int days=getTotalDays(yearFrom、yearTo、calendar);
对于(int year=yearFrom;year 对于(int month=Calendar.janur;month来说,这可能不是问题的答案,但是。我已经看过这个代码示例,并且有一些注释
目前尚不清楚该代码的作用
使用date
时,强烈建议使用特殊类:Calendar
或YodaTime
我不知道为什么,但你不必担心闰年的不同日子
System.currentTimeMillis()
ret在当前时间和1970年1月1日UTC午夜之间运行毫秒:因此不清楚为什么在代码中使用1970
作为代码示例,看看这个。它可能会帮助您
public static int getDays(int yearFrom, int yearTo) {
Calendar calendar = Calendar.getInstance();
int days = getTotalDays(yearFrom, yearTo, calendar);
for (int year = yearFrom; year < yearTo; year++) {
calendar.set(Calendar.YEAR, year);
for (int month = Calendar.JANUARY; month <= Calendar.DECEMBER; month++) {
calendar.set(Calendar.MONTH, month);
int maxDayOfMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
if (days <= maxDayOfMonth)
break;
days -= maxDayOfMonth;
}
}
return days;
}
private static int getTotalDays(int yearFrom, int yearTo, Calendar calendar) {
calendar.set(Calendar.DAY_OF_MONTH, 1);
int days = 0;
for (int year = yearFrom; year < yearTo; year++) {
calendar.set(Calendar.YEAR, year);
days += calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
}
return days;
}
public static int getDays(int yearFrom,int yearTo){
日历=Calendar.getInstance();
int days=getTotalDays(yearFrom、yearTo、calendar);
对于(int year=yearFrom;year 对于(int month=Calendar.一月;month哦,成功了!非常感谢。为什么会有不同?我不明白。不客气。我编辑了答案以包括为什么会发生:)哦,成功了!非常感谢。为什么会有不同?我不明白。不客气。我编辑了答案以包括为什么会发生:)