【问题标题】:Capturing Integers from Strings in Java在 Java 中从字符串中捕获整数
【发布时间】:2013-11-02 04:28:21
【问题描述】:

我正在尝试使用Scanner 从用户输入中捕获整数。这些整数表示坐标和半径在 0 到 1000 之间。它是 2D 平面上的圆。

必须做的是以某种方式将这些整数与一行分开。因此,例如,用户输入

5 100 20

因此x坐标为5,y坐标为100,半径为20。

用户必须在同一行上输入所有这些值,并且我必须以某种方式将程序中的值捕获到三个不同的变量中。

所以,我尝试使用这个:

Scanner input = new Scanner(System.in);
String coordAndRadius = input.nextLine();

int x = coordAndRadius.charAt(0);   //  x-coordinate of ship
int y = coordAndRadius.charAt(2);   //  y-coordinate of ship
int r = coordAndRadius.charAt(4);   //  radius of ship

对于一位数字字符,作为测试。结果不是很好。

有什么建议吗?

【问题讨论】:

    标签: java string integer java.util.scanner


    【解决方案1】:

    嗯,最简单的方法(不是最好的方法)就是使用字符串方法将它们拆分为数组:

    public static void filesInFolder(String filename) {
        Scanner input = new Scanner(System.in);
        String coordAndRadius = input.nextLine();
        String[] array = coordAndRadius.split(" ");
    
        int x = Integer.valueOf(array[0]);
        int y = Integer.valueOf(array[1]);
        int r = Integer.valueOf(array[2]);
    }
    

    您也可以使用 nextInt 方法,如下所示:

    public static void filesInFolder(String filename) {
        Scanner input = new Scanner(System.in);
        int[] data = new int[3];
        for (int i = 0; i < data.length; i++) {
            data[i] = input.nextInt();
        }            
    }
    

    您的输入将存储在数组data

    【讨论】:

      【解决方案2】:

      使用coordAndRadius.split(" "); 创建一个字符串数组并从每个数组元素中提取值。

      【讨论】:

        【解决方案3】:

        您必须将输入拆分为 3 个不同的字符串变量,每个变量都可以单独解析。使用split method 返回一个数组,每个元素包含一个输入。

        String[] fields = coordAndRadius.split(" ");  // Split by space
        

        然后您可以使用Integer.parseInt 将每个片段解析为int

        int x = Integer.parseInt(fields[0]);
        // likewise for y and r
        

        在访问之前确保您的数组中有 3 个元素。

        【讨论】:

          【解决方案4】:

          试试这个:

          Scanner scanner = new Scanner(System.in);
          
          System.out.println("Provide x, y and radius,");
          int x = scanner.nextInt();
          int y = scanner.nextInt();
          int radius = scanner.nextInt();
          
          System.out.println("Your x:"+x+" y: "+y+" radius:"+radius);
          

          您可以输入“10 20 24”或“10\n20\n24”,其中 \n 当然是换行符。

          如果您想知道为什么您的方法在这里不起作用,请解释一下。

          int x = coordAndRadius.charAt(0);
          

          charAt(0) 返回字符串的第一个字符,然后将其隐式转换为 int。假设您的 coordAndRadius =“10 20 24”。所以在这种情况下,第一个字符是'1'。所以上面的语句可以写成: int x = (int)'1';

          【讨论】:

            【解决方案5】:

            按空格分割值

            String[] values = coordAndRadius.split(" ");
            

            然后使用 Integer.parseInt 将每个值作为 int 获取:

            int x = Integer.parseInt(values[0]);
            int y = Integer.parseInt(values[1]);
            int radious = Integer.parseInt(values[2]);
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-02-08
              • 2012-10-06
              • 1970-01-01
              • 2013-04-10
              • 1970-01-01
              相关资源
              最近更新 更多