Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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_Validation_Validate Request - Fatal编程技术网

在java中验证用户输入

在java中验证用户输入,java,validation,validate-request,Java,Validation,Validate Request,嗨,我遇到了一个问题,与一个大学的项目,我的工作。我正在尝试验证输入,以便在尝试借书时输入的BookID仅在名为“BookList”的数组中存在时才有效。在这一刻,我让它工作,以便它验证它,以确保输入的是整数,而不是字母或负数 我已经试了很多次了,但是我完全被卡住了??如果有任何提示或帮助,我将不胜感激。 谢谢 //借书方法 公共无效借书簿(){ int loanID; 做{ System.out.println(“请输入您希望借阅的图书的图书ID”); 而(!input.hasNextInt(

嗨,我遇到了一个问题,与一个大学的项目,我的工作。我正在尝试验证输入,以便在尝试借书时输入的
BookID
仅在名为“
BookList
”的数组中存在时才有效。在这一刻,我让它工作,以便它验证它,以确保输入的是整数,而不是字母或负数

我已经试了很多次了,但是我完全被卡住了??如果有任何提示或帮助,我将不胜感激。 谢谢

//借书方法
公共无效借书簿(){
int loanID;
做{
System.out.println(“请输入您希望借阅的图书的图书ID”);
而(!input.hasNextInt()){//检查输入的ID是否为整数-验证
System.out.println(“这不是一个整数”);
input.nextLine();//打开扫描仪
}
loanID=input.nextInt();//将loanID变量设置为与来自扫描仪的输入相等。
}
while(loanID<0 | | loanID>100000000)//验证-需要更改以便while LOAN ID存在于数组列表中????
for(int i=0;i
创建一个变量int isExist=0;在从用户那里得到输入后…检查数组并查看该书是否存在。然后使isExist=1;然后循环的另一个部分只做if语句

if( isExist == 0) { 
System.out.println("Book is not found");
}
顺便说一下,一旦你在数组中找到了书,你就想使用
break

您可以对ArrayList使用.contains()方法。您只需确保根据项目的状态删除项目

if(bookList.contains(loanID)){
   //logic for book exists
}else{
   //book is on loan.
}
现在,正如我所说的,你们需要确保你们正在进行适当的验证,以移除借出的书籍等,这样才能起作用。你现在拥有你的逻辑的方式是对你的循环做很多不必要的工作。通过这种方式,您可以轻松地扫描列表并找到所需的项目。当然,有更好的方法来设置您的列表等,但这应该可以保持您的代码非常相似

编辑

您要求提供有关在验证该项存在后如何查找该项索引的信息。这仍然很简单。验证项目存在后,您将使用以下行:

int index = bookList.indexOf(loanID);
这将返回ArrayList中该书位置的索引。一旦你有了索引,你就可以开始做你以前所做的一切了:

bookList.get(index).getBookId();

这几乎与您之前所做的完全相同,但可以减少到3行,甚至可以缩短

if (BookList.contains(loanID)) {
     int index = BookList.indexOf(loanId);
     if (!BookList.get(index).getStatus().equals("On Loan")) {
         System.out.println("The book named: " + BookList.get(index).getTitle() + " has now been taken on loan.");
         BookList.get(index).setStatus("On Loan.");
     }else{
         System.out.println("Book is on loan already.");
     }
}else{
    //logic for not existing.
}

那么问题出在哪里呢?在第11行,我正在验证输入的数字必须在0到100000000之间。我需要对此进行更改,以便输入的数字必须是名为BookList的数组列表中的一个元素,这样我就可以生成一个错误,说明“此书在库中不存在”。使用input.NextInt()direclty并使用inputmaschException保护该块。捕获此异常时,除了整数之外,您还输入了其他任何内容。如果没有抛出,现在就有整数了。无论您想在哪里/以何种方式循环使用图书列表ID,当您可以使用布尔值时,为什么要使用
int
,那么您将如何操作您发现存在于数组列表中的图书呢?ie使用与之相关的变异子,就像在mintue我使用循环一样,所以我可以使用get(I)来操纵它。非常感谢您的初始验证,但我不想为您编写所有代码。试着先把它扔进去,然后看看会发生什么:)这就是编码的乐趣。
bookList.get(bookList.indexOf(itemId)).getBookId();
if (BookList.contains(loanID)) {
     int index = BookList.indexOf(loanId);
     if (!BookList.get(index).getStatus().equals("On Loan")) {
         System.out.println("The book named: " + BookList.get(index).getTitle() + " has now been taken on loan.");
         BookList.get(index).setStatus("On Loan.");
     }else{
         System.out.println("Book is on loan already.");
     }
}else{
    //logic for not existing.
}