Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
几个java类验证输入_Java_Arrays_Validation_Arraylist_Client Server - Fatal编程技术网

几个java类验证输入

几个java类验证输入,java,arrays,validation,arraylist,client-server,Java,Arrays,Validation,Arraylist,Client Server,我使用java在netbeans上创建了一个程序。系统会提示用户输入“编号:”。例如,当他们输入数字“1”时,数组列表中的数据显示为“number:1”、“Name:userA”和“Phone:2”。如果我输入的值不在数组列表中,例如5 userA的详细信息将出现。如何输入验证以检查输入的数字是否保存在数组列表中?如果数字不在数组列表中,是否有方法告诉用户这一点,并允许他们再次尝试输入数字 数据类: public class Data { private final List<D

我使用java在netbeans上创建了一个程序。系统会提示用户输入“编号:”。例如,当他们输入数字“1”时,数组列表中的数据显示为“number:1”、“Name:userA”和“Phone:2”。如果我输入的值不在数组列表中,例如5 userA的详细信息将出现。如何输入验证以检查输入的数字是否保存在数组列表中?如果数字不在数组列表中,是否有方法告诉用户这一点,并允许他们再次尝试输入数字

数据类:

public class Data {

    private final List<DetailsT> DetailsL;

    public Data() {
        DetailsL = new ArrayList<>();
        DetailsL.add(new DetailsT(1, "userA", 2));
        DetailsL.add(new DetailsT(2, "userB", 9);

    }

    public ArrayList<?> getList() {
        return (ArrayList<?>) DetailsL;
    }
公共类数据{
私人最终名单;
公共数据(){
DetailsL=新的ArrayList();
添加(新的DetailsT(1,“userA”,2));
DetailsL.add(新的DetailsT(2,“userB”,9);
}
公共ArrayList getList(){
返回(ArrayList)DetailsL;
}
输出类:

//initialize streams so we can send message
    in = new DataInputStream(clientSocket.getInputStream());
    out = new DataOutputStream(clientSocket.getOutputStream());


    Data p = new Data();
    List<DetailsT> DetailsL = (List<DetailsT>) p.getList();     


     for (DetailsTq : detailsT) {      
        int number; 
        while (true) {
            // as soon as a message is being received, print it out!
            number = in.readInt();
            System.out.println("\n" + "Number: " + number);
        }
     }
    }
}
//初始化流以便发送消息
in=新的DataInputStream(clientSocket.getInputStream());
out=newdataoutputstream(clientSocket.getOutputStream());
数据p=新数据();
List DetailsL=(List)p.getList();
for(DetailsTq:detailsT){
整数;
while(true){
//收到消息后,立即打印出来!
number=in.readInt();
System.out.println(“\n”+”编号:“+Number”);
}
}
}
}

此外,当用户在程序中输入-1时,会话应该结束。尽管在输入“-1”时,我已在代码中尝试了这一点,userA的详细信息仍在检索中。非常感谢您提供的所有帮助。

假设number是
DetailsT
类中的一个属性,您可以在
Data
类中编写一个方法,通过迭代数组列表返回number的
详细信息
对象,例如:

public DetailsT findByNumber(int number){
    for(DetailsT details : DetailsL){
        if(details.getNumber() == number){
            return details;
        }
    }
    return null;
}
大体上,您可以调用此方法,如果它返回
null
,则可以提示用户再次输入号码,例如:

Data data = new Data();
DetailsT details = data.findByNumber(number);
if(details == null){
 //do something
}else{
 //do something else
}

我已经将其添加到数据类中,但如何在程序中调用它?我已经添加了一个示例作为答案。旁注:像DetailsL、DetailsT之类的名称…不要这样做。不要使用缩写;名称应该说明这是什么。名称有助于理解程序的功能;或者它们会模糊它…DetailsL代表列表和详细信息lsT是我得到的类型。但我告诉你:这些都是坏名字。例如:你不应该在一个名字中“指定”你收藏的类型。在大多数情况下,这样叫“细节”就足够了。为什么说它是一个列表?也许你以后会把它改成一个集合。