2011-03-05 14 views
1

私はこの素晴らしいコードを書くことができました(私はそれで新しく、とてもエキサイティングな.. :)) まだ私はこのコードを入力することができます理解していない。 最初にコンソールラインにこのエラーが表示されます(私はEclipseを使用しています)。 スレッド "main"の例外java.lang.ArrayIndexOutOfBoundsException:0 at NumberConverter.main(NumberConverter.java:5)。 それはどういう意味ですか?Javaで入力 - どのように動作しますか?

私はちょうどそれが動作するかどうかをチャックしたい、と私はどのように関数/プログラムを呼び出すことはできません。 私は、スキームのように、私が書いた関数に何かが起こったかどうかを知るために、 "旧式の方法"で呼び出すことがありました。どのようにJavaで動作するのですか?私たちはプログラム自体を呼びますか?関数?何をどこで書いていますか? - それがうまくいくならば、チャックする方法は関係ありません、私は入力をプラグインする方法を知ってうれしいです。 ありがとうございました!

public class NumberConverter{ 
public static void main(String[] args) { 
     int i = Integer.parseInt(args[0]); 
     toBinary(i); 
     toOctal(i); 
     toHex(i); 
    } 

    public static void toBinary(int int1){ 
     System.out.println(int1 + " in binary is"); 
     System.out.println(Integer.toBinaryString(int1)); 
    } 
    public static void toOctal(int int1){ 
     System.out.println(int1 + " in octal is"); 
     System.out.println(Integer.toOctalString(int1)); 
    } 

    public static void toHex(int int1){ 
     System.out.println(int1 + " in hex is"); 
     System.out.println(Integer.toHexString(int1)); 
    } 

}

+1

Eclipseでコマンドライン引数を渡す必要があります。これは、 'NumberConverter'クラスの実行コンフィギュレーションで行うことができます。 – zengr

答えて

2

アプリの起動に引数を設定する必要があります。これを実行コンフィギュレーションエディタで行うことができます(プロジェクトを右クリック - > Run as .. - > Run Configurations)。 「引数」タブでは、「引数」フィールドをプログラムすることができます。 1行に1つの引数(例えば、5)。

空配列args[0]の最初の要素を取得する空のargs配列のため、ArrayIndexOutOfBoundsExceptionが発生します。アプリの起動引数が設定されていない場合、配列が空であるため、これを行うことはできません。

+0

こんにちはmichal、私は引数タブで正確に何をしますか?ありがとう。 –

+0

クリックして引数をプログラムし、例えば書く。 5.この値は 'args'に渡されます。それから、あなたは 'args'を通してそれにアクセスします。したがって、 'args [0]'は "5"を含みます。 –

+0

ありがとうございますmichal! –

4

ArrayIndexOutOfBoundsExceptionNumberConverterのライン5であったことを意味します。これは、ほとんどの場合、この行であることを行っている(完全なソースは、空白行に続いてpackageステートメントが含まれている場合、これがなる行5):あなたがプログラムに渡す最初の引数にアクセスしようとし

int i = Integer.parseInt(args[0]); 

あなたがプログラムに引数を渡さなかったのでarbs配列は空で、args[0]にアクセスしようとするとArrayIndexOutOfBoundsExceptionになります。

コマンドラインからこれを実行していた場合は、それは次のようになります。

$ java com.mypackage.NumberConverter 1 

ここ$com.mypackageは、パッケージ名と1であると推定され、プロンプトでコマンドライン引数はありますあなたはargs [0] `でアクセスすることができます。

あなたはEclipse内からコマンドライン引数を追加するには、コマンドラインhere is a nice blog postを経由して日食を使用していませんので。

1

ArrayIndexOutOfBoundsExceptions手段(のJavaDocから):配列が不正な指標と アクセスされたことを示すためにスローさ

。 インデックスが負の値か で、配列のサイズが 以上です。

あなたの例外からの0がより大きいかargs.lengthに等しいので、args[0]ArrayIndexOutOfBoundsExceptionsをスローします。私の提案は、あなたのアプリケーションに渡され、args[0]が初期化されて入力されているかどうかを確認するために、OSがあなたのJVMに戻ってくる引数を調べることです。

また、Eclipseからプログラムを実行するには、引数をRun Configurationsに設定する必要があります。

1

ArrayIndexOutOfBoundsExceptionは、配列外のインデックスにアクセスしようとするとスローされます。のは、私はそれぞれのインデックス0と1を使用して第1および第2の要素にアクセスすることができますサイズ2の配列を持っているが、私は、インデックス4に要素にアクセスしようとした場合、例外がスローされたとしましょう:

public static void stam() { 
    int[] array = { 0, 1 }; 
    // this will print 0 
    System.out.println(array[0]); 
    // this will print 1 
    System.out.println(array[1]); 

    // this will crash the program 
    System.out.println(array[4]); 
} 

あなたの本能は、入力を使ってプログラムを簡単にテストすることができるという点で正しいですが、リテラル値と変数を使用する方が簡単で、確かに柔軟なオプションです。いずれの場合でも、実行コンフィギュレーションを設定して、Run > Run Configurations...ウィンドウでコマンドライン引数を含めることができます。

おそらく推測したように、プログラムがクラッシュしたのは、クラスの5行目の最初のコマンドライン引数にアクセスしようとしたためですが、引数がなかったため配列に0要素があります。

コマンドライン引数を使用してJavaプログラムを実行する場合、もう少し柔軟な方法は、別のクラスのmainメソッドを呼び出して、手動でString配列を渡すことです。しかし、メソッドを素早くテストしたい場合は、リテラル値を渡すだけです。

関連する問題