[英]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;
radius
和height
應在左側:
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
。 因此,我們總是有一對數字 ( Radius和Height )。
我還創建了一個類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.