2016-11-19 33 views
-1

最初に私は何か(名前、連絡先、ID番号)を入力したいが、2つの異なるファイルを表示するがコードは同じである。最初のコードの問題は「名前」の入力場所が消え、誰も私に問題を教えてもらえますか?私はJavaで新しいです。最初のコードの同じコードだが出力が異なる

public class Admin { 
static Scanner scan= new Scanner(System.in); 
static Client client = new Client(); 
    public void admin(){ 
     newClient []nc = new newClient[10]; 
     \\login(); 
    while(true){ 
     System.out.println("Select 1:add Client\n 2:add Account\n 3:login as Client"); 
     try{ 
     int selection = scan.nextInt(); 
     switch(selection) 
     { 
     case 1: addClient(nc); 
       break; 
     case 2: \\addAccount(nc); 
       break; 
     case 3: ; 
       break; 
     default: System.out.println("INvalid selection"); 
     } 
     } 
     catch(InputMismatchException ex){ 
     System.out.println("Invalid input"); 
     scan.nextLine(); 
      } 
     }  
    } 
    public void addClient(newClient []nc){ 
    for(int i=0;i<nc.length;i++){ 
    System.out.println("Enter name"); 
    String name = scan.nextLine(); 
    System.out.println("Enter contact"); 
    String contact = scan.nextLine(); 
    System.out.println("Enter id number"); 
    String idNumber = scan.nextLine(); 
    nc[i]=new newClient(name,contact,idNumber); 
    System.out.println(nc[i]); 
    } 
    } 

出力は、名前の入力場所が不足しているのはなぜ名前

が接触

を入力し

入力されましたか? 第二のコードが正しく動作している第二のコード

public static void main(String[]args){ 
    Scanner scan =new Scanner(System.in); 
    for(int i=0;i<nc.length;i++){ 
    System.out.println("Enter name"); 
    String name = scan.nextLine(); 
    System.out.println("Enter contact"); 
    String contact = scan.nextLine(); 
    System.out.println("Enter id number"); 
    String idNumber = scan.nextLine(); 
    nc[i]=new newClient(name,contact,idNumber); 
    System.out.println(nc[i]); 
    } 
    } 

があります。

は名前

を入力接触

を入力しΦXocę 웃 Пepeúpa ツscan.nextIntenterを読んwouldntの言うようidNumber

答えて

1

二枚は、実際には異なっています。

2番目のコードでは、scanオブジェクトは新しいものです。唯一の方法はnextLine()です。最初のコードでは、scanオブジェクトがクラスレベルで作成され、がが呼び出される前にに使用されています。

"使用されています"ここでは非常に重要です。それによって私はあなたがしてnextLinescannextIntと呼ばれ、意味:

int selection = scan.nextInt(); <-- You called nextInt here! 
    switch(selection) 
    { 
    case 1: addClient(nc); 
      break; 
    case 2: \\addAccount(nc); 
      break; 
    case 3: ; 
      break; 
    default: System.out.println("INvalid selection"); 
    } 
    } 
    catch(InputMismatchException ex){ 
    System.out.println("Invalid input"); 
    scan.nextLine(); 
     } 
    }  
} 
public void addClient(newClient []nc){ 
    for(int i=0;i<nc.length;i++){ 
     System.out.println("Enter name"); 
     String name = scan.nextLine(); <-- then you called nextLine here! 
     System.out.println("Enter contact"); 
     String contact = scan.nextLine(); 
     System.out.println("Enter id number"); 
     String idNumber = scan.nextLine(); 
     nc[i]=new newClient(name,contact,idNumber); 
     System.out.println(nc[i]); 
    } 
} 

これはnextLineメソッドは空の文字列を返します。

なぜですか?

のは、nextIntnextLineの両方のためにdocumentationを見てみましょう:

nextInt()

入力の次のトークンをintとしてスキャンします。

nextLine()

現在行過ぎこのスキャナーを進めて、スキップした入力を返します。

Scanner s = new Scanner(System.in); 
s.nextInt(); 
System.out.println(s.nextLine()); 

が、私はスキャナの現在位置がどこにあるかを示すために|文字を使用します。問題が発生する可能性がnextLineすぐnextInt

私は、呼び出し理由を説明するために、このような状況を再現する単純なコードを作成しました。

プログラムが起動し、

| 

その後、私は数20を入力します。

​​

を今すぐスキャナが20を読み込み、documetationに従って、スキャナがこの位置にする必要があります:

20| 

ここで興味深い部分があります。nextLine "Advances this scanner現在の行を通過し、スキップされた入力を返します。

20 
| 

どのような入力がスキップされましたか?何もない!その結果、空の文字列が返されます。

+0

あなたの明確な説明をありがとう、私は何か新しいことを学びました。 –

0

を入力します。


ので、別の解決策は、前name contact id情報が読み取られ、このようなenterを読み取るためにscan.nextLine()を採用:コードの

public void addClient(newClient []nc){ 
    scan.nextLine(); 
    for(int i=0;i<nc.length;i++){ 
     ....// your origin code 
    } 
関連する問題