2016-03-23 36 views
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"); 

    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

使用while循环,而不是'if' –

+0

如果用户按照您的指示,那么它永远不会起作用,因为'詹姆斯25'的(用户名**和**的年龄,像你说的输入)输入时, 'input'的值将是'“James 25”',并且这不是地图中的*键*。 – Andreas

+2

但是,积极的一点是,无论你说自己多大年纪,计算机都会认为你是25岁。我的妻子喜欢这个想法。 – ajb

回答

3

一种if语句检查单个条件,然后运行如果满足该条件的代码块中的代码。 A while声明是下一个级别。它会检查条件 - 在你的情况下,不管键是否在映射中 - 然后在条件为真时运行代码。运行代码后,它会再次检查条件,并会一直重复执行,直到它停止为真。也就是说,它运行该块内的代码,而的条件为真-其输入已经在地图中。

使用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

谢谢,我不知道while循环可以做检查。 – 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”进行连续的检查过程并执行语句。

相关问题