2016-03-23 2 views
0

問題を説明するために小さなスニペットを作成しました。最初のチェックでは、これらのユーザー名の1つを入力すると、ユーザーが既に存在していると判断できます。しかし、2番目の入力はチェックをバイパスすることができます。誰もそれを迂回することができないようにするにはどうすればいいですか?値がすでにハッシュマップに存在するかどうかを確認し、有効な値を入力できるようにします。

public static void main(String[] args) { 
    HashMap<String, String> uID = new HashMap<>(); 
    Scanner scan = new Scanner(System.in); 
    String input = null; 
    uID.put("James", "25"); 
    uID.put("Jack", "25"); 
    uID.put("John", "25"); 

    System.out.println("Enter your username and age"); 

    input = scan.nextLine(); 
    if (uID.containsKey(input)) { 

     System.out.println("Username already exist, choose another username."); 
     input = scan.nextLine(); 
     uID.put(input, "25"); 

    } 
} 
+0

もし 'if'の代わりにwhileループを使う –

+0

あなたの指示に従えば、' James 25'(ユーザ名**と** age、あなたが入力したようなもの)の入力、 'input'の値は' 'James 25 ''になります。これはマップの* key *ではありません。 – Andreas

+2

しかし、肯定的なことは、あなたが何歳であっても、コンピュータはあなたが25歳だと思うだろうということです。私の妻はそのアイデアが好きです。 – ajb

答えて

3

ifステートメントは、単一の状態をチェックし、その条件が満たされた場合コードブロック内のコードを実行します。 whileステートメントはそれの次のレベルです。あなたのケースでは、キーがマップにあるかどうかをチェックし、条件が真であればコードを内部で実行します。コードを実行した後、再び条件をチェックし、それが真実になるまで何度も何度も繰り返します。つまり、ブロック内のコードを実行します。条件がtrue-の場合、の入力が既にマップにあります。

while loopを使用して、キーが無効かどうかを確認し、有効なキーを入力するまで値を入力し続けるようにします。

また
public static void main(String[] args) { 
    Map<String, String> uID = new HashMap<>(); 
    Scanner scan = new Scanner(System.in); 
    String input = null; 
    uID.put("James", "25"); 
    uID.put("Jack", "25"); 
    uID.put("John", "25"); 

    System.out.println("Enter your username and age"); 

    input = scan.nextLine(); 
    while (uID.containsKey(input)) { 

     System.out.println("Username already exist, choose another username."); 
     input = scan.nextLine(); 
    } 

    uID.put(input, "25"); 
} 
+0

OPはJavaには新しく、少し説明が彼を助けるようです。 –

+0

ありがとう、私はループがチェックを行うことができます知っていませんでした。 – newbieprogrammer

0

、あなたがdo-whileループを使用することがあります。それが検証されています後までのマップ値を更新しないでください。

do 
{ 
    System.out.println("Enter unique username and age"); 
    input = scan.nextLine(); 
}while(uID.containsKey(input)); 

uID.put(input, "25"); 

ここには、存在しないユーザー名が表示されるまで、ユーザー名を要求しています。

0

マップを確認してマップに保存する前に、ユーザー名と年齢を分割する必要があります。

public static void main(String[] args) { 
      HashMap<String, String> uID = new HashMap<>(); 
      Scanner scan = new Scanner(System.in); 
      String input = null; 
      uID.put("James", "25"); 
      uID.put("Jack", "25"); 
      uID.put("John", "25"); 
      //prompt user to input details 
      System.out.println("Enter your username and age");   
      input = scan.nextLine(); 
      //split name and age 
      String arr[]=input.split("\\s"); 
      //check if name is already present in the map 
      while (uID.containsKey(arr[0])) { 
       //if already present,prompt user to reenter username alone 
       System.out.println("Username already exist, choose another username."); 
       //store the username to array's 0th index(as age is already present in 1st index) 
       arr[0] = scan.nextLine();     
      } 
      //if details not present,then store it to the map 
      uID.put(arr[0], arr[1]); 
      System.out.println("Your details saved.."); 
      System.out.println("uID="+uID); 
     } 
0

単一時間条件のチェックで、条件を満たした場合、それに文を実行「した場合、」あなたの最初のチェックの後、第二の入力はそれを上回る理由、それはです。 「while」を使用すると、毎回連続してチェックを行い、ステートメントを実行することができます。

関連する問題