Java:如何为一个int读取多个扫描程序值

时间:2017-04-23 07:49:20

标签: java arrays for-loop methods

我一直试图弄清楚如何根据从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

6 个答案:

答案 0 :(得分:1)

这两行是错误的:

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

radiusheight应位于左侧:

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

另外,如果你想&#34; group&#34;成对的输入,这不会起作用:

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

这只会将输入分组为&#34;(0,1),(1,2)和#34;。改为使用它;

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

答案 1 :(得分:1)

你必须这样做:

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

答案 2 :(得分:1)

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

由于

答案 3 :(得分:0)

注意:半径和高度在首次初始化后不会获得新值

答案 4 :(得分:0)

尝试一下:

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]);
    }
}
}

答案 5 :(得分:0)

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

方法import qualified Data.ByteString.Char8 as C8 main = do scores <- fmap (map (fst . fromJust . C8.readInt) . C8.words) C8.getLine :: IO [Int] 清除数字之间的所有processItems(),这行代码white-spaces确保我们有偶数个输入。所以我们总是有一对数字 Radius Height )。

我还创建了一个类if (integers.length % 2 == 0)和一个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

InputPair