2012-05-17 105 views
6

的我刚开始一单元阵列中,我得到了一些示例代码来寻找断为数组这个非常基本的入门程序。基本上我所要做的就是制作两个阵列,用于询问一周当天的温度。收集信息后,它会简单地将它吐出像这样的字符串。Java中的数组索引越界

周一的温度是16度

周二的温度是18度

...等

从我从我收到的示例代码,我做正确了解的一切。但是当试图运行程序(在Netbeans中)时,我得到这个错误。

“异常在线程 ”主“ java.lang.ArrayIndexOutOfBoundsException:7 在temperatures.Temperatures.main(Temperatures.java:27) Java结果:1”

下面是代码:

public static void main(String[] args)throws IOException { 
     // TODO code application logic here 
     BufferedReader br = new BufferedReader (new InputStreamReader (System.in)); 
     String temp[]= new String[7]; 
     String day[]= new String[7]; 
     day[1]=("Monday"); 
     day[2]=("Tuesday"); 
     day[3]=("Wednesday"); 
     day[4]=("Thursday"); 
     day[5]=("Friday"); 
     day[6]=("Saturday"); 
     day[7]=("Sunday"); 
     for (int i=0; i <7; i++){ 
      System.out.println("Please enter the temperature for" + day[i]); 
      temp[i]=br.readLine(); 
     } 
     for (int i=0; i <7; i++){ 
     System.out.println("The high temperature on " + day[i]+ " was "+ temp[i]); 
     } 
    } 
} 

回答

6

Arrays begin at zero(< - 这是给这就解释了为什么在文章的链接)。因此,作为day[1]=("Monday");分配你的第一个值的问题,它应该是day[0]=("Monday");希望帮助

+0

啊好吧,我有一种感觉,这将是一个小的逻辑错误。我重新运行该程序,替换数组数字并且工作。谢谢! – Dave555

+0

欢迎来到堆栈溢出:)我很高兴你想通了!请接受您以最佳方式回答您的问题的答案(点击投票箭头下面的小勾号),以便将来有相似问题的参加者将知道什么解决了您的问题。 – kentcdodds

4

阵列在Java中开始在位置0,没有位置1。所以,如果你把它初始化为一个大小为7,星期一是0和周日为6没有可用的指标7。

1

的阵列起动器0,

试试这个

day[0]=("Monday"); 
    day[1]=("Tuesday"); 
    day[2]=("Wednesday"); 
    day[3]=("Thursday"); 
    day[4]=("Friday"); 
    day[5]=("Saturday"); 
    day[6]=("Sunday"); 

,你应该改变这种循环

for(int i=0; i < 7; i++){ 
     System.out.println("Please enter the temperature for" + day[i]); 
     temp[i]=br.readLine(); 
    } 

为此

for(int i=0; i < day.length(); i++){ 
     System.out.println("Please enter the temperature for" + day[i]); 
     temp[i]=br.readLine(); 
    } 

我希望能帮到你。

+1

小心,这被标记为功课。我们不想明确地给某人答案,只要指出他们在正确的方向。 – kentcdodds

0

这是因为你的阵列从1开始,从端部7。如果您的阵列长度为7,最后指数应大于tyhe阵列长度少一个。在你的情况下,数组看到你已经声明了7个元素,但插入了8个位置。所以,从0开始阵列,从6

0

结束它如果数组是是“N”,那么该阵列的边界是0和“N-1”。 在你的情况下,数组边界是0和6.但是你正在将数值写入数组[7],这是不存在的。