我有以下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");
}
}
答案 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中。每次在向集合中添加条目之前,请检查它是否属于集合。如果没有添加,则抛出错误。