2016-12-15 1 views
0

このコードを実行すると誰かが私に説明してもらえますか?最初のキーボード入力を入力するまでは、Sysout文は表示されません。あなたのmainメソッドが実行される前に、あなたのtest1クラスのJava関数の呼び出しについて

import java.util.Scanner; 

    public class test1{ 

      static Scanner scan = new Scanner(System.in); 
      static int k = scan.nextInt(); 

      public static void main(String[] args) { 
       setK(); 
       System.out.println(" K is: " + k); 
     } 
      public static void setK(){ 
       System.out.println("Please input K value"); 
       k = scan.nextInt(); 
     } 
    } 
+0

[静的変数がJavaで初期化されている場合]複製可能です(http://stackoverflow.com/questions/8704423/when-static-variables-are-initialized-in-java) –

答えて

3

static変数が初期化されます。これは、クラスが初期化されたときに発生します。

したがって

static int k = scan.nextInt(); 

文があなたのmain方法や入力待ちの前に実行されます。入力が完了すると、mainが実行を開始し、setK();が呼び出され、「K値を入力してください」と表示されます。

あなたのsetK()メソッドが入力を読み込み、それをkに割り当てる方法であると思われるため、これが意図的なものかどうかはわかりません。

import java.util.Scanner; 

public class test1{ 

     static Scanner scan = new Scanner(System.in); 
     static int k; 

     public static void main(String[] args) { 
      setK(); 
      System.out.println(" K is: " + k); 
    } 
     public static void setK(){ 
      System.out.println("Please input K value"); 
      k = scan.nextInt(); 
    } 
} 
+0

ありがとうございます。 – AnthonyJ

1

このラインクラスの初期化中に

static int k = scan.nextInt(); 

ランを:そのためにあなたのコードを変更します。それはブロックし、整数の入力を待ちます。

このコードは、staticの初期化であるため、mainより前に実行されます。クラスの最初のメソッドが呼び出される前に完了している必要があります。その時点で、入力した最初の値はkです。その後、mainsetKを呼び出し、別の入力を促します。

これは、kの宣言から初期化(つまり= scan.nextInt();部分)を削除することで解決できます。次のように

0

たぶん、あなたが期待する動作は次のようになります。

package test; 

import java.util.Scanner; 

public class ScannerTest { 

    static Scanner scan = new Scanner(System.in); 
    static int k; 

    public static void main(String[] args) { 
     System.out.println("Please input K value"); 
     k = scan.nextInt(); 
     System.out.println(" K is: " + k); 
    } 
} 

ところで、あなたはJavaの命名規則に固執する必要があります。

+0

Java命名規則として何を意味するのかをさらに説明できますか? – AnthonyJ

+0

@AnthonyJ http://www.oracle.com/technetwork/java/codeconventions-135099.html –

+0

@ 911DidBush、ありがとうございます。私は何か間違っていると思ったので、私は尋ねた。私は読んだことがあり、一緒に行くつもりです - ありがとう。 – AnthonyJ

関連する問題