[英]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.