Java-программа завершается вместо циклического перебора параметров

Я хочу, чтобы моя программа перебирала опции (1,2,3) снова и снова, чтобы я мог выполнять функции несколько раз. Однако после того, как я ввожу ввод для одной опции, программа просто завершается. Как сделать так, чтобы оно повторялось несколько раз без прерывания?

Это пример ввода и вывода в данный момент:

1 - вход

2 - Посмотри вверх

3 - черный список

3

Введите черный список IPA: 232

(Затем заканчивается)

import java.util.*;

public class Main {
public static void main(String[] args) {

    DNS a = new DNS();

    String domain;
    String ipa;

    System.out.printf("1 - Input\n");
    System.out.printf("2 - Look up\n");
    System.out.printf("3 - Blacklist\n");

    Scanner scan = new Scanner(System.in);
    while ( scan.hasNextInt() ) {
        int option = scan.nextInt();

            if(option == 1){

                System.out.printf("Enter Domain & IPA: ");
                Scanner scan1 = new Scanner(System.in);
                    String theLine = scan1.nextLine();
                    String[] split = theLine.split(" ");
                    domain = split[0];
                    ipa = split[1];
                    a.input(domain, ipa);
                    scan1.close();

            } else if (option == 2){

                System.out.printf("Enter Domain: ");
                Scanner scan2 = new Scanner(System.in);
                    String theLine = scan2.nextLine();
                    domain = theLine;
                    ipa = a.lookup(domain);
                    if(ipa.equals("null")){
                        System.out.printf("There is no IPA for %s\n", domain);
                    } else {
                        System.out.printf("The IPA for %s is %s\n", domain, ipa);
                    }
                    scan2.close();

            } else if (option == 3){

                System.out.printf("Enter Blacklisted IPA: ");
                Scanner scan3 = new Scanner(System.in);
                    String theLine = scan3.nextLine();
                    ipa = theLine;
                    a.blacklist(ipa);
                    scan3.close();

            } else {
                System.out.printf("Incorrect command input\n");
            }
    }
    scan.close();
}
}       

3 ответа

Не используйте цикл в опциях чтения, используйте switch-case вместо. Вы не можете использовать цикл для итерации printf выход:)

    Scanner scan = new Scanner(System.in);
    int option = scan.nextInt();
    switch(option){
        case 1:{//input your argument 1 here}break;
        case 2:{//input your argument 2 here}break;
        case 3:{//input your argument 3 here}break;
    }

Не создавайте более одного сканера с System.in, так как если вы закроете сканер, вы рискуете закрыть сам System.in и испортить все функции сканера.

Вместо этого используйте один и только один сканер, созданный с помощью System.in, и делитесь им в своей программе, где это необходимо, и закрывайте его только тогда, когда программа полностью завершена со всем его использованием.

Попробуйте это вместо этого:

import java.util.Scanner;
class Main {
public static void main(String args[]){
Scanner s = new Scanner(System.in);
int option;
while(((option=s.nextInt())<4)&&(option>0))
{
if(option == 1){
System.out.printf("Enter Domain & IPA: ");
Scanner scan1 = new Scanner(System.in);
String theLine = scan1.nextLine();
String[] split = theLine.split(" ");
domain = split[0];
ipa = split[1];
a.input(domain, ipa);
scan1.close();
}
else if(option == 2){

System.out.printf("Enter Domain: ");
Scanner scan2 = new Scanner(System.in);
String theLine = scan2.nextLine();
domain = theLine;
ipa = a.lookup(domain);
if(ipa.equals("null")){
System.out.printf("There is no IPA for %s\n", domain);
} else {
System.out.printf("The IPA for %s is %s\n", domain, ipa);
}
scan2.close();
}
else if(option == 3){
System.out.printf("Enter Blacklisted IPA: ");
Scanner scan3 = new Scanner(System.in);
String theLine = scan3.nextLine();
ipa = theLine;
a.blacklist(ipa);
scan3.close();
}
else
System.out.printf("Incorrect command input\n");
}
}
}
Другие вопросы по тегам