仅接受java中的唯一输入

时间:2014-01-10 06:31:09

标签: java validation input

我有以下java代码,它接受10个字符串输入。我只需要接受唯一的输入。我的意思是说,如果第一个设备地址是“123”而第二个设备地址也是“123”那么它应该显示错误。

这是示例代码,我缩短了它。

  InputStreamReader istream = new InputStreamReader(System.in) ;
  BufferedReader bufRead = new BufferedReader(istream) ;

  for (int i=0; i<10; i++)
  {
  try {
    System.out.println("Device Address: ");
    String DevAdd = bufRead.readLine();

    System.out.println("Device address:" + DevAdd);
     }
     catch (IOException err) {
          System.out.println("Error reading line");
     }
     catch(NumberFormatException err) {
          System.out.println("Error Converting Number");
     }     
     }

6 个答案:

答案 0 :(得分:2)

使用Set<String>,如下所示:

// before the loop:
Set<String> set = new HashSet<String();

// inside loop:
String id = // read id;

if (!set.add(id)) {
    // error - id has been used before
}

add() Set方法返回true如果该操作更改了该设置,如果之前已经看到该值,则 false 因为集合不允许重复值,并且尝试添加集合中已有的值将是无操作。

如果在将值添加到Set之前没有看到该值,那么您就可以为下一次迭代做好准备了。

答案 1 :(得分:1)

检查出来:

Set<String> inputSet= new HashSet<String>();

for (int i = 0; i < 10; i++) {
    try {
        System.out.println("Device Address: ");
        String DevAdd = bufRead.readLine();

        // Check if already exists. If yes, throw exception
        if(inputSet.contains(DevAdd)) {
            throw new Exception("Already exists");
        }
        //  Indicates input does not exist in the set. Add it       
        inputSet.add(DevAdd);

        System.out.println("Device address:" + DevAdd);
    } catch (IOException err) {
        System.out.println("Error reading line");
    } catch (NumberFormatException err) {
        System.out.println("Error Converting Number");
    }
}

答案 2 :(得分:0)

将其存储在集合中,检查该值是否存在并抛出错误。
使用Set可以完成同样的操作,但即使您没有检查(req抛出异常),如果值存在,它也只允许添加唯一值..以下两件事可以完成< / p>

1)使用波西米亚人提到的if (!set.add(input))之类的东西
2)使用set.contains

答案 3 :(得分:0)

将这些值保存在地图中 Map<device,address> ,这样当您尝试验证地址是唯一的或不是只访问这些地图时,您可以轻松地知道地址是唯一的还是不

答案 4 :(得分:0)

虽然设置是此senario 最适合的数据结构,因为它不允许重复,(请参阅设置的ankur答案)您也可以使用列表< / strong>如下所示。

public class HelloWorld{

     public static void main(String []args){
        InputStreamReader istream = new InputStreamReader(System.in) ;
  BufferedReader bufRead = new BufferedReader(istream) ;
  List<String> list=new ArrayList<String>();
  for (int i=0; i<10; i++)
  {
  try {
    System.out.println("Device Address: ");
    String DevAdd = bufRead.readLine();
    if(!list.contains(DevAdd))
    list.add(DevAdd);
    else
    throw new Exception("Already exists");
    System.out.println("Device address:" + DevAdd);
     }
     catch (IOException err) {
          System.out.println("Error reading line");
     }
     catch(NumberFormatException err) {
          System.out.println("Error Converting Number");
     }     
     }
     }
}

答案 5 :(得分:-1)

更好地将其存储在Set中。每次在向集合中添加条目之前,请检查它是否属于集合。如果没有添加,则抛出错误。