Java 循环扫描器输入,直到 enter 或 “e” 不带 .split

Java loop scanner input until enter or "e" without .split

提问人:coolkid9090 提问时间:3/20/2021 更新时间:3/20/2021 访问量:176

问:


public class test {

   private static Scanner userpress = new Scanner(System.in);

   public static void main(String[] args) {
      int r = 0;
      int h = 0;

      System.out.println("---------------------------------");
      System.out.println("write your two numbers (numerator, denominator)");

      userpress.useDelimiter("\\s"); // here
      while (userpress.hasNextInt()) {

         r = userpress.nextInt();
         h = userpress.nextInt();
         // userpress.nextLine(); // remove
         int x = r / h;
         System.out.print(x + " ");

      }

   }

   private static void message() {
      System.out.println("user pressed e");

   }

}

该程序要求用户至少输入 2 个输入,第一个输入是分子,第二个输入是分母,然后它将给出分子/分母的值并将其打印出来。 这是我希望能够做的:我希望能够写下尽可能多的数字,例如,输出应该是,如果我写,输出应该是。但是,这仅适用于偶数。例如,如果我写不偶数,那么程序就会崩溃,因为 2 没有被任何东西除以。我希望程序删除最后一个输入,如果它不均匀,例如,如果输入是 ,那么输出应该是 因为 10/5=2 并且最后一个输入应该被丢弃。我该如何解决这个问题? 问题 2:例如,如果我在数字后面写一个;,然后我希望输出是我不想使用 .split,我必须使用 和10 5 20 42, 510 5 20 4 30 52, 5, 610 5 310 5 32e10 5 20 4 e2, 5 user pressed ehasnext...next()

爪哇岛 日蚀 输入 while-循环 java.util.scanner

评论

0赞 coolkid9090 3/20/2021
我怎样才能使除 和 以外的所有输入都被忽略并且不会导致崩溃inte

答:

0赞 Anil Demir 3/20/2021 #1

您可以使用正则表达式来检查空格,而不是在空格之前取唯一的第一部分。 喜欢这个:

  import java.util.Scanner;

  public class Main {

    private static Scanner userpress = new Scanner(System.in);

    public static void main(String[] args) {
        String first;
        String second;

        System.out.println("---------------------------------");
        System.out.println("write your two numbers (numerator, denominator)");

        userpress.useDelimiter("\\s"); // here
        while (userpress.hasNextLine()) {

            first = userpress.nextLine();
            second = userpress.nextLine();
            if(first.contains(" ") || second.contains(" ")) {
                String[] firstParts = first.split(" ");
                String[] secondParts = second.split(" ");
                first = firstParts[0];
                second = secondParts[0];
            }
            // userpress.nextLine(); // remove
            int x = Integer.valueOf(first) / Integer.valueOf(second);
            System.out.print(x + " ");

        }

    }

    private static void message() {
        System.out.println("user pressed e");

    }

}
0赞 Arvind Kumar Avinash 3/20/2021 #2

代码的问题在于,您正在扫描两个整数,只需检查 。每次扫描整数时都应该进行此检查。userpress.hasNextInt()

工作代码:

import java.util.Scanner;

public class Main {
    public static void main(String args[]) {
        int r = 0;
        int h = 0;
        System.out.print("Write your two numbers (numerator, denominator): ");
        Scanner userpress = new Scanner(System.in);
        userpress.useDelimiter("\\s");

        while (userpress.hasNextInt()) {
            r = userpress.nextInt();
            if (userpress.hasNextInt()) {
                h = userpress.nextInt();
                int x = r / h;
                System.out.print(x + " ");
            } else {
                break;
            }
        }
        String s = userpress.next();
        if ("e".equalsIgnoreCase(s)) {
            message();
        }
    }

    private static void message() {
        System.out.println("user pressed e");
    }
}

示例运行:

Write your two numbers (numerator, denominator): 10 5 3 e
2 user pressed e

另一个示例运行:

Write your two numbers (numerator, denominator): 10 5 3
2 

另一个示例运行:

Write your two numbers (numerator, denominator): 10 5 20 5
2 4 

另一个示例运行:

Write your two numbers (numerator, denominator): 10 5 20 5 e
2 4 user pressed e
0赞 Giorgi Tsiklauri 3/20/2021 #3

或者,如果您不介意使用更多空间,您可以想出一个简单的算法,例如:

public class Main {

    private static Scanner userpress = new Scanner(System.in);

    public static void main(String[] args) {
        System.out.println("---------------------------------");
        System.out.println("write your two numbers (numerator, denominator)");
        userpress.useDelimiter("\\s");

        List<Integer> numbers = new ArrayList<>();

        while(userpress.hasNextInt()) {
            numbers.add(userpress.nextInt());
        }

        for (int i=0; i<numbers.size()-1; i+=2) {
            int x = numbers.get(i)/numbers.get(i+1);
            System.out.print(x + " ");
        }
    }
}