簡體   English   中英

Java:如何為一個int讀取多個掃描儀值

[英]Java: How to read multiple scanner values for one int

我一直試圖弄清楚如何根據從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

這兩行是錯誤的:

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

您必須這樣做:

for (int i = 0; i < numbers.length; i+=2)
{
    radius = numbers[i];
    height = numbers[i + 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

謝謝

請注意:首次初始化后,半徑和高度不會獲得新值

嘗試一些作為:

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

我認為您可以嘗試此解決方案。

if (integers.length % 2 == 0)確保我們有偶數個輸入,則processItems()方法將清除數字和該行代碼之間的所有white-spaces 因此,我們總是有一對數字RadiusHeight )。

我還創建了一個類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

您可以在此處找到完整的Java代碼

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM