2016-12-14 132 views
-1

我正在製作一個程序,用於在輸入的數字上運行公式。輸入中的第一個整數描述公式中要使用的行數或整數。我通過計算答案並將它們推入數組來處理這個問題。然而,我在我的一個for循環中遇到了一個數組超出界限的異常,我無法弄清楚爲什麼。For循環中的Java數組索引超出範圍例外

這裏是我的主要方法:

public static void main(String[] args) { 
    Scanner scan = new Scanner (System.in); 
    int[] nums = {}; 
    int lines = scan.nextInt(); 
    for(int i = 0; i < lines; i++){ 
     nums[i] = potFormula(scan.next()); 
    } 
    System.out.println(nums); 
} 
+2

看起來你需要將NUMS陣列一邊初始化線 –

+0

作爲一個長度,一旦你解決了陣列問題,你會發現你的打印語句沒有做你想做的。請參閱http://stackoverflow.com/questions/409784/whats-the-simplest-way-to-print-a-java-array – Sam

回答

4

陣列都不能更換一次分配一個固定的大小。您正在初始化nums{},這是一個空數組。它的大小將始終爲零。

相反,你可以使用:

int lines = scanner.nextInt(); 
int[] nums = new int[lines]; 
2

你的陣列太小(它具有零個元素)。以下是解決此問題的一種方法:

int lines = scan.nextInt(); 
int[] nums = new int[lines]; 

由於您事先知道大小,因此此方法有效。如果你沒有,你可以使用ArrayList<Integer>。數組列表可以根據需要增長。

+0

加1提及ArrayList! – haifzhan

+0

@HaifengZhang儘管事先知道項目的數量,但ArrayList可能只是不必要的開銷。 – Sam

1

您需要的NUMS數組初始化爲線的長度,

像這樣:

public static void main(String[] args) { 
    Scanner scan = new Scanner (System.in); 
    int lines = scan.nextInt(); 
    int[] nums = new int[lines]; 
    for(int i = 0; i < lines; i++){ 
     nums[i] = potFormula(scan.next()); 
    } 
    System.out.println(nums); 
}