有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何用Java中的“Scanner.hasNext”完成程序

我想知道如何用“java扫描器”完成这个程序 特别是当我将它与System.inscanner.hasNext()一起使用时

Scanner sc = new Scanner(System.in);

例如,当我在某个IDE上运行下面的代码时

    public static void main(String[] args){

         Scanner sc = new Scanner(System.in)
         int[] arr = new int[3];
         int i = 0;

         // put all the number from scanner to the array.
         while(sc.hasNext()){
              arr[i++] = sc.nextInt();
          }

          System.out.println(Arrays.toString(arr));

并在控制台中输入一些数字(用于扫描仪的输入), 它不会停止接收数字

我想使用sc.hasNext(),以便在完成为用户获取一些输入后,将收到的所有数字放在一起,就像我对代码的注释一样

如何完成扫描仪在控制台上获取输入


共 (6) 个答案

  1. # 1 楼答案

    Scanner将继续读取,直到找到“文件结束”条件

    当您从stdin读取数据时,如果您使用<;样式重定向

    但是,要将用户的输入放入数组中,可以通过以下方法替换while条件:

    while (sc.hasNext() && i!=arr.length) {
        arr[i++] = sc.nextInt();
    
    }
    
  2. # 2 楼答案

    您不需要为hasNext设置条件,因为输入输入后它将始终返回true

    您应该对数组长度有一个条件

    试试这个

                    int[] arr = new int[3];
                     int i = 0;
                     while(i<arr.length)
                         arr[i++] = sc.nextInt();
    
                      System.out.println(Arrays.toString(arr));
    
  3. # 3 楼答案

    由于将用户的输入存储在固定大小(4)的结构中,因此可以使用for循环,
    毕竟,使用它是正确的:

    when the number of repetitions is predefined


    for (int i = 0; i < arr.length; i++){
        arr[i] = sc.nextInt();
    } 
    
  4. # 4 楼答案

    代码将在stdinSystem.in在Java中)打开时运行。如果需要,您可以通过编程方式将其关闭,但通常是通过按Ctrl+d 在程序正在运行的终端中(快捷方式是Windows控制台中的Linux/macOS,我想是Ctrl+z

  5. # 5 楼答案

    只需在while中添加一个条件,将数组限制为特定长度,这样当它达到此长度时,t将无法接受更多输入,它将关闭循环并打印数组 像这样:

    Scanner sc = new Scanner(System.in);
         int[] arr = new int[3];
         int i = 0;
    
         // put all the number from scanner to the array.
         while(sc.hasNext() && i < arr.length){
              arr[i++] = sc.nextInt();
          }
    
          System.out.println(Arrays.toString(arr));
    
  6. # 6 楼答案

    您可以更改while循环,并在整数数达到数组长度时设置条件分隔符。试试这个

    while (sc.hasNext()) {
        arr[i++] = sc.nextInt();
        if (i == arr.length) {
            break;
        }
    }
    

    或者你可以把它写成一个简单的for循环

    // int i = 0;
    
    for (int i = 0; i<arr.length;i++) {
        arr[i] = sc.nextInt();
    }
    

    这里有助于您了解sc.nextInt()的工作原理

    每当执行sc.nextInt()时,scanner objects sc都会查找一个整数,并返回在sc object扫描的流中找到的下一个整数。如果在流中找不到整数,它将抛出一些异常

    现在来看代码,当执行while循环时,每次代码进入while循环时,它调用sc.nextInt(),读取一个整数并将其分配到数组中,但由于您已将数组大小声明为3,因此只需中断循环,否则它将尝试访问数组中大于3的索引,并将导致您不希望出现的ArrayIndexOutOfBounds异常。因此,我将该条件放入while循环中,当索引达到3时,它就会中断。在for循环中也实现了类似的功能。希望我的解释有帮助。如果您还有任何疑问,请告诉我

    您可以做的另一件事是,将while循环中的sc.hasNext()更改为sc.hasNextInt(),因为hasNext()从流中捕获任何数据(整数或非整数)并返回true,如果下一个传入数据不是整数,则您不希望它返回true,否则将发生异常

    一旦在while循环条件下将sc.hasNext()更改为sc.hasNextInt(),一旦向程序提供3个整数作为输入,程序将自动结束,但如果用户尝试输入3个以上的整数,它将运行ArrayIndexOutOfBounds异常,因为数组长度仅限于3。因此,如果(i==arr.length){break;}你的while循环也可以是这样的

    while (sc.hasNextInt()) {
        arr[i++] = sc.nextInt();
        if (i == arr.length) {
            break;
        }
    }