2015-11-06 53 views
-2
import java.util.Scanner; 
public class Tar0 { 
    static Scanner in = new Scanner (System.in); 
    public static void main(String[] args) { 
     int d, i = 0, a = 0, f = 1; 
     System.out.println("Enter How many Digits you want?"); 
     d = in.nextInt(); 
     int num[] = new int[d]; 
     for(i = 0; i < d; i++) { 
      System.out.println("Enter Single Digit"); 
      num[i] = in.nextInt(); 
     } 
     for(i = d; i > 0; i--) { 
      a = a + (num[i] * f); 
      f = f * 10; 
     } 
     System.out.println("The Number is: " + a); 
    } 
} 

問:用戶將進入的位數和計劃將使從一個數字我已經自己寫的代碼,但它似乎犯規工作。Java數組得到的數字和陣列輸入使數

當運行程序:

  1. 輸入似乎正常工作。我試圖測試
  2. 陣列的輸出,而不與計算的第二循環,似乎工作 但隨着計算似乎粉碎:

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4 at tar0.main(tar0.java:17)

這是怎麼回事?

+3

Java使用基於0的索引。有效的索引是0 ..(d-1) – Arkadiy

+0

請在發佈之前嘗試正確地格式化您的代碼(實際上,只是始終格式化您的代碼,它會增加可讀性,並使其更容易找到錯誤或瞭解代碼一樣)。此外,請嘗試遵循命名約定(例如:類名稱應以大寫字母開頭,變量以小寫字母開頭)。 – brimborium

回答

0

Java數組從0開始並從那裏繼續。你的代碼格式化的方式現在你正在失去一個值,因此你的數組太小而無法保存值。 上面概述的一個選項是減少你的d值,以便我們在循環中使用適當的數組大小。這將是首選方式,所以我刪除了上面的其他選項的其他代碼。

import java.util.Scanner; 
public class tar0 { 
static Scanner in = new Scanner (System.in); 
public static void main(String[] args) 
{ 
    int d,i=0,a=0,f=1; 
    System.out.println("Enter How many Digits you want?"); 
    d=in.nextInt(); 
    int num[] = new int[d]; 
    for(i=0;i<d;i++) 
    { 
     System.out.println("Enter Single Digit"); 
     num[i]=in.nextInt(); 
    } 
    for(i = d - 1; i >0 ; i--) 
    { 
     a=a+(num[i]*f); 
     f=f*10; 

    } 
    System.out.println("The Number is: "+a); 
} 
+0

謝謝你非常有用! :) – Damnsoul

+0

不是問題:) – basic

0

如果您修改了以下代碼,它將起作用。

for(i=d;i>0;i--) 
{ 
    a=a+(num[i-1]*f); 
    f=f*10; 

} 

數組索引值將起始於0,以便改變從NUM陣列[I]爲num [I-1]