2017-05-22 6 views
1
public class Main { 
    public static void main(String[] args) { 
     args = new String[]{"0 0 1 1"}; 
    } 
} 

コンソールからargsScannerで初期化します。出来ますか?あなたはjavaコマンドを使用してプログラムを実行するときスキャナで初期化する配列

+4

待って、何?いいえ、あなたは 'args'を初期化しません。あなたのために既に提供されています。コマンドラインで値を渡すだけです。コマンドラインを使用したくない場合は、 'Scanner'を排他的に*使用します。どのような問題を解決しようとしていますか? – Makoto

+0

配列内に1つの文字列値がありますか? – Aryan

+0

はい、可能です。しかし、単に新しい配列を作成し、 'args'だけを残すのはなぜですか? 'args'を捨てるよりもやや難しいです。 –

答えて

1

argsは例えば、Javaのことで初期化されます:java Main.class a b c

をだから、それは我々がプログラム内で初期化するものではないのです。 mainメソッド内のargsを再初期化することはできますが、(a)以前の値を失い、(b)引数の不変性に反して動作しないようにしてください。あなたはおそらく、例えば、新しいarrayを作成して、入力をユーザーに求めることができる:

String[] array = new String[5]; 
Scanner scanner = new Scanner(System.in); 
System.out.println("Enter "+ array.length + " inputs :"); 
for(int i = 0; i < array.length ; i++){ 
    array[i] = scanner.nextLine(); 
} 
2

args

は、呼び出し時にJavaプログラムに渡されるコマンドライン引数が含まれています。

public class PrintArgs { 
    public static void main (String[] args) { 
     for (String s: args) {// loop through args array 
      System.out.println(s); // print out every String 
     } 
    } 
} 

私は今PrintArgsを実行し、私が書くコマンドラインで、たとえば、argsStringsを渡すことができます:だから

$java PrintArgs First Second Third 

私はPrintArgsクラス次のように作成した場合、たとえば

コンソールに表示されます:

First 
Second 
Third 

したがって、配列String[]argsから読み取るためにScannerは必要ありません。さらに

、あなたは、それからの読み取りにScannerを使用し、その後、argsに文字列引数としてファイルパスを渡すためにあなたは、たとえば行うことができますしたい場合:

public class ReadFileUsingScanner{ 
    public static void main (String[] args) { 
     try { 
       File f = new File(args[0]); // suppose you passed the file path as first String 
       Scanner input = new Scanner(f); 

       while (input.hasNextLine()) { // loop through every line 
       System.out.println(input.nextLine()); // print it out 
       } 
      input.close(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

その後、あなたのようなたとえばReadFileUsingScannerを実行しますこの:

$java ReadFileUsingScanner someFilePath.txt