0

我想做一个条件,当用户输入一个小于 1024 的端口号时,它会要求他们再试一次。我知道如何执行 if 语句和简单的 while 循环,但不太确定如何执行此操作。

import java.net.ServerSocket;

class Server {
    public void start (int num) throws Exception {
        ServerSocket server = new ServerSocket(num);
        if(num  < 1024){
            ServerSocket server = new ServerSocket(num);
        }
    }
}

然而,这是错误的。我知道也许可以使用一个while循环,但我尝试了类似的方法但仍然出错。如果用户输入一个小于 1024 的数字,那么它会要求他们再次输入数字。继续这样做,直到数字> = 1024。

谢谢。

4

4 回答 4

1

你可以扔的IllegalArgumentException时候num < 1024。此方法的调用者应使用 try .. catch 块(可能在循环内重试)

调用者可以使用:

Server s = new Server;
int maxRetries = 10;
int retry = 0;
while(retry < maxRetries){
    try {
        retry++;
        // Read value to num somehow (scanner maybe)
        s.start(num);
    catch (IllegalArgumentException e){
        // print error string
    }
}
于 2013-03-10T13:56:49.457 回答
1
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int port = scanner.nextInt();
    while (port < 1024) {
        System.out.println("Please enter a valid port");
        port = scanner.nextInt();
    }
    System.out.println("Port is "+port);
    //Put the logic here to start the server socket.
}

试试这个,用你的价值替换扫描仪部分。

于 2013-03-10T14:03:28.637 回答
1

你只需要扫描仪类。见http://www.homeandlearn.co.uk/java/user_input.html

Scanner user_input = new Scanner( System.in );
int portEntered=user_input.nextInt();
while(user_input<1024)
{
//  message stating user has entered number less than 1024 using sysout
portEntered= user_input.nextInt();
}
于 2013-03-10T14:13:22.077 回答
0

我不会费心测试这种情况。只需尝试创建 ServerSocket,如果它出于任何原因抛出 BindException,请重新提示用户并重试。

于 2013-03-11T05:04:53.557 回答