【问题标题】:Java: How to read multiple scanner values for one intJava:如何读取一个 int 的多个扫描仪值
【发布时间】:2017-09-19 23:43:24
【问题描述】:

我一直试图弄清楚如何根据从Scanner 类获得的输入计算面积和体积。该练习包括一次接收多对半径和高度。

我已经编写了方法并对其进行了测试,所以它们应该可以工作。我遇到的问题是当我想使用来自“扫描仪”的输入并使用它们进行计算时。

这是我的代码(我没有包含方法):

    Scanner keyboard = new Scanner(System.in); 

    int radius = 0;
    int height = 0;

    System.out.print("Enter values ");
    String input = keyboard.nextLine();

    String[] items = input.split(" ");
    int[] numbers = new int[items.length];

    for (int i = 0; i < items.length; i++)  
        {
            numbers[i] = Integer.parseInt(items[i]);
        } 

    for (int i = 0; i < numbers.length/2; i++)
    {
        numbers[i] = radius;
        numbers[i + 1] = height;

        double result = area(radius);
        double result1 = area (radius,height);
        double result2 = volume (radius,height);

        System.out.println("");
        System.out.print("r = " + radius + "    ");
        System.out.print("h = " + height);
        System.out.println("");
        System.out.print("Base area:    ");
        System.out.printf("%.2f", result);
        System.out.println("");
        System.out.print("Surface area: ");
        System.out.printf("%.2f", result1);
        System.out.println("");
        System.out.print("Volym:            ");
        System.out.printf("%.2f", result2);
        System.out.println("");
    }
    keyboard.nextLine(); 

结果如下:

Input: 2 4 5 1

Output: 


r = 0    h = 0

Base area:        0.00

Surface area:     0.00

Volym:            0.00



r = 0    h = 0

Base area:        0.00

Surface area:     0.00

Volym:            0.00

【问题讨论】:

    标签: java arrays for-loop methods


    【解决方案1】:

    你必须这样做:

    for (int i = 0; i < numbers.length; i+=2)
    {
        radius = numbers[i];
        height = numbers[i + 1];
        .
        .
        .
    }   
    

    【讨论】:

    • 你能向他解释一下吗?为什么他的numbers.length/2 错了。
    • 因为他想在搜索整个数组而不是一半之后计算所有半径和高度的面积。注意 for 循环中的 i+=2。
    【解决方案2】:

    这两行是错误的:

    numbers[i] = radius;
    numbers[i + 1] = height;
    

    radiusheight 应该在左侧:

    radius = numbers[i];
    height = numbers[i + 1];
    

    此外,如果您想将输入“分组”成对,这将不起作用:

    radius = numbers[i];
    height = numbers[i + 1];
    

    这只会将输入分组,如“(0, 1), (1, 2)”。改用这个;

    radius = numbers[i * 2];
    height = numbers[i * 2 + 1];
    

    【讨论】:

    • 第一次运行时效果非常好,但第二次运行时它开始于数字[1],而不是数字[2]。所以现在它必须为每次运行增加两次。我试过: for (int i = 0; i
    • @xarroo 你使用了numbers[i * 2]numbers[i * 2 + 1],正如我在上一部分所说的那样吗?
    【解决方案3】:
    import java.util.Scanner;
    public class Test {
    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
    
        int radius = 0;
        int height = 0;
    
        System.out.print("Enter values ");
        String input = keyboard.nextLine();
    
        String[] items = input.split(" ");
        int[] numbers;
    
        if(items.length % 2 == 0){ //Making sure you are having even number of inputs
            numbers = new int[items.length];
    
            for (int i = 0; i < items.length; i++) {
                numbers[i] = Integer.parseInt(items[i]);
            }
    
            for(int i = 0,j = -1; i < numbers.length / 2; i++){
                radius = numbers[++j];
                height = numbers[++j];
                System.out.println("radius: " + radius + " height: " + height);
    
                //Write Your Area Volume Code Here and use the radius and height which is there in the loop for calculation
                //Your code goes here
                //Your code ends here
            }
        }else{
            System.out.println("Incorrect input provided");
        }
        keyboard.close();
    }}
    

    试试这件作品。示例输出如下:

    输入值 1 2 3 4 5 6 7 8 9 10 半径:1 高度:2 半径:3 高度:4 半径:5 高度:6 半径:7 高度:8 半径:9 高度:10

    谢谢

    【讨论】:

      【解决方案4】:

      注意:半径和高度在第一次初始化后不会得到新值

      【讨论】:

        【解决方案5】:

        试一下:

        public class NewMain
        {
        class Crate
        {
            public int radius;
            public int height;
        }
        
        public static void main(String[] args)
        {
            Scanner keyboard = new Scanner(System.in);
        
            System.out.print("Enter values ");
            String input = keyboard.nextLine();
        
            String[] items = input.split(" ");
            Crate[] numbers = new Crate[items.length];
        
            for (int i = 0; i < items.length; i ++)
            {
                numbers[i].radius = Integer.parseInt(items[i * 2]);
                numbers[i].height = Integer.parseInt(items[i * 2 + 1]);
            }
        }
        }
        

        【讨论】:

          【解决方案6】:

          我想你可以试试这个解决方案。

          processItems() 方法清除了数字之间的所有white-spaces,这行代码if (integers.length % 2 == 0) 确保我们有偶数个输入。所以我们总是有一对数字半径高度)。

          我还创建了一个类 InputPair 和一个 InputPair 数组来打印对保持模块化。

          你可以用这个测试偶数个输入:

          2 9 4 7 5 6 7 1 3 8 12 5 8 2 3 9 2 9 2 7

          这对于奇数个输入:

          2 9 4 5 6 7 1 3 8 12 5 8 6 3 9 2 9 2 7

          您可以在这里找到full Java code

          import java.util.ArrayList;
          import java.util.Arrays;
          import java.util.List;
          import java.util.Scanner;
          
          public class Main {
          
              private static class InputPair {
                  public int radius;
                  public int height;
          
                  public InputPair() {}
          
                  public void printValues() {
                      System.out.println("Radius: " + radius + " Height: " + height);
                  }
              }
          
              public static void main(String[] args) {
                  Scanner keyboard = new Scanner(System.in);
          
                  System.out.print("Enter values ");
                  String input = keyboard.nextLine();
          
                  String[] items = input.split(" ");
                  Integer[] integers = processItems(items);
                  InputPair[] values = new InputPair[integers.length];
          
                  System.out.println(Arrays.toString(items));
                  System.out.println("items length:  " + items.length);
          
                  System.out.println(Arrays.toString(integers));
                  System.out.println("items length:  " + integers.length);
          
                  if (integers.length % 2 == 0) { 
                      for (int i = 0; i < integers.length / 2; i++) {
                          System.out.print("Index:  " + i + " ");
                          try {
                              values[i] = new InputPair();
                              values[i].radius = integers[i * 2];
                              values[i].height = integers[i * 2 + 1];
                              values[i].printValues();
                          } catch (NullPointerException ne) {
                              System.out.println("Error NullPointerException");
                          }
          
                      }
                  } else {
                      System.out.println("The number of values bust be an even number. ");
                  }
              }
          
              private static Integer[] processItems(String[] items) {
                  List<Integer> numbers = new ArrayList<>();
          
                  for (String s : items) {
                      //Do your stuff here
                      s = s.replaceAll("[^\\d]", "");
                      if (!s.equals("")) {
                          numbers.add(Integer.parseInt(s));
                          System.out.println(Integer.parseInt(s));
                      }
                  }
          
                  Integer[] stockArr = new Integer[numbers.size()];
                  return numbers.toArray(stockArr);
              }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-03-24
            • 2016-05-18
            • 2020-03-29
            • 1970-01-01
            • 2013-11-15
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多