2013-10-31 30 views
0

当写这样简单的东西:有人熟悉Netbeans:为什么会发生这种情况?错误不是一个真正的错误?

import java.util.Scanner; 
public class Practice { 
    public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     System.out.println("Please enter array size: "); 
     int x = sc.nextInt(); 
     int [] anArray; 
     int index = 100; 
     anArray = new int[x]; 
     for (int i=0; i<=x; i++){ 
      anArray[i] = index; 
      index += 100; 
      System.out.println ("Element at index "+ i + ": " + anArray[i]); 
     } 

    } 

} 

Netbeans的编译和正常运行的代码,但在输出端这样看:

run: 
Please enter array size: 
12 
Element at index 0: 100 
Element at index 1: 200 
Element at index 2: 300 
Element at index 3: 400 
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 12 
Element at index 4: 500 
Element at index 5: 600 
Element at index 6: 700 
Element at index 7: 800 
Element at index 8: 900 
Element at index 9: 1000 
Element at index 10: 1100 
Element at index 11: 1200 
    at Practice.main(Practice.java:21) 
Java Result: 1 
BUILD SUCCESSFUL (total time: 3 seconds) 

这似乎离我..为什么是例外通过代码中途抛出?然后在最后完成?

它指向第21行: anArray [i] = index;

老实说不是一个大问题..我只是玩弄和审查一些Java的基础知识(这是一段时间......)和例外是让我觉得我做错了什么事,米不知道我其实是因为它似乎工作我的意图。

谢谢!

+1

该问题处理更多的线程的同步,然后它与您的代码。 Netbeans可能使用两个不同的线程监视stderr和stdin,然后尝试将输出同步到单个线程(EDT)中,但是由于每条线(可能)都单独同步,所以它们会重叠。是的,这很烦人。有人可能会争辩说,有两个独立的窗户会更有帮助,有时它会,有时它不会 – MadProgrammer

回答

2

更改为声明:

for (int i=0; i<x; i++){ // Change <= to < 
     anArray[i] = index; 
     index += 100; 
     System.out.println ("Element at index "+ i + ": " + anArray[i]); 
    } 

如果创建length = 12一个数组,那么你可以通过访问:

anArray[0] 
anArray[1] 
... 
anArray[11] 

但你访问它高达anArray[12],所以它抛出错误。

+0

谢谢!现在你指出它是完美的!任何想法为什么它会在输出中的两条不同的线上抛出异常? – OscarWilde

+0

真诚,我不知道。但是'ArrayIndexOutOfBoundsException'错误很容易被检测到,因为跟踪错误告诉你你试图访问什么'bad'索引,在你的情况下是'12':'java.lang.ArrayIndexOutOfBoundsException:12' – Christian

相关问题