java - 使用扫描仪时如何验证输入?
问题描述
当我输入一个整数作为高数时,它会起作用,并且当我输入一个字符时验证会起作用,因为它会显示错误消息。
但是,我不能让它为低数字做同样的事情?
我不确定我做错了什么。
这是完整的代码
package client;
import static com.sun.org.apache.xerces.internal.util.FeatureState.is;
import static com.sun.org.apache.xerces.internal.util.PropertyState.is;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static int Highnumber;
public static int Lownumber;
public static void main(String[] args) {
String hostName = "localhost";
int hostPort = 4444;
if (args.length != 0) {
if (args[0] != null) {
hostName = args[0];
}
if (args[1] != null) {
hostPort = Integer.parseInt(args[1]);
}
}
System.out.println("Trying to Connect to Server");
try (Socket serverSocket = new Socket(hostName, hostPort);
DataOutputStream os = new DataOutputStream(new BufferedOutputStream(serverSocket.getOutputStream()));
BufferedReader is = new BufferedReader(new InputStreamReader(serverSocket.getInputStream()))) {
Scanner ScannerInput = new Scanner(System.in);
System.out.println("Enter High Number -");
Integer highnumber = null;
while (highnumber == null) {
try {
highnumber = Integer.parseInt(ScannerInput.next());
} catch (NumberFormatException e) {
System.out.println("ERROR, ENTER AN INTEGER:");
}
}
Integer lownumber = null;
System.out.println("Enter low Number -");
while (lownumber == null) {
try {
Integer number = Integer.parseInt(ScannerInput.next());
if (number <= highnumber) {
lownumber = number;
}else{
System.out.println("ERROR,needs to be lower");
}
} catch (NumberFormatException e) {
System.out.println("ERROR, ENTER AN INTEGER:");
}
}
Highnumber=highnumber;
Lownumber=lownumber ;
在以下部分中出现错误:
}
int numberToFind = Integer.parseInt(is.readLine());
System.out.println("Target Number Set" + "\nStart Guessing!:");
int Tries = 0;
int UserInput = 0;
while (UserInput != numberToFind) {
UserInput = ScannerInput.nextInt();
os.writeInt(UserInput);
os.flush();
System.out.println(is.readLine());
Tries++;
}
System.out.println("Well Done! You found the number " + numberToFind + " in " + Tries + " tries");
} catch (Exception e) {
System.err.println("Exception: " + e.getMessage());
}
}
解决方案
好的,我做了一些重组,不必分层 while 循环
//Scanner scannerInput = new Scanner(System.in);
System.out.println("Enter High Number -");
Integer highnumber = null;
while (highnumber == null) {
try {
highnumber = Integer.parseInt(clientInput.next());
} catch (NumberFormatException e) {
System.out.println("ERROR, ENTER AN INTEGER:");
}
}
Integer lownumber = null;
System.out.println("Enter low Number -");
while (lownumber == null) {
try {
Integer number = Integer.parseInt(clientInput.next());
if (number <= highnumber) {
lownumber = number;
}else{
System.out.println("ERROR,needs to be lower");
}
} catch (NumberFormatException e) {
System.out.println("ERROR, ENTER AN INTEGER:");
}
}
Highnumber=highnumber;
Lownumber=lownumber ;
}
推荐阅读
- android - Android 测试 RxJava 2
- java - 无法安装 Liferay Dev Studio CE 捆绑版
- wordpress - WordPress 网站重定向到 sslgateway.com
- java - Java中ArrayList的remove方法是如何实现的?
- android - “元素”是从 2 个包中导入的
- javascript - 如何根据自定义属性分别为具有相同类的所有元素设置背景颜色
- coq - 带有承认义务和嵌套递归的程序固定点错误
- c# - 如何获取所选 TreeViewItem 的文本值?
- bash - 需要使用 shell 脚本从文件中替换行的特定部分
- c# - Asp.Net Identity 2 中的密码验证