在程序中,我要求用户输入用户输入格式为:
速度12健康99力量50精度.9然后拆分并将输入分配到多个整数和双精度(速度,健康,功率,精度),以便稍后在数学方程中使用。我该怎么做呢(分隔符等)?我已经研究过Scanner课程,但是我找不到能够在这种情况下提供帮助的东西。 我只想指出正确的方向
谢谢
答案 0 :(得分:1)
public void calculate(String input){
String[] inputAsArray = input.split(" ");
int speed = Integer.valueOf(inputAsArray[1]).intValue();
int health = Integer.valueOf(inputAsArray[3]).intValue();
int power = Integer.valueOf(inputAsArray[5]).intValue();
double accuracy = Double.valueOf(inputAsArray[7]).doubleValue();
}
//when order isn't specified and variables may be missing.
public void calculate2(String input){
String[] inputAsArray = input.split(" ");
HashMap<String,String> map = new HashMap<String,String>();
for(int i = 0; i < inputAsArray.length; i+= 2){
map.put(inputAsArray[i], inputAsArray[i+1]);
}
int speed = -1;
if(map.containsKey("speed")){
speed = Integer.valueOf(map.get("speed")).intValue();
}
/*
* OTHER VARIABLES NOT SHOWN. SAME FORMAT
*/
}
答案 1 :(得分:0)
此代码从sysin扫描一行并将其转换为键值对的映射:
Scanner sc = new Scanner(System.in);
String input =sc.nextLine();
Pattern p = Pattern.compile("(\\w+)\\s+(\\d*\\.*\\d*)");
Matcher m = p.matcher(input);
Map<String, String> map = new HashMap<>();
while (m.find()) {
map.put(m.group(1), m.group(2));
}
希望这会对你有所帮助。
答案 2 :(得分:0)
只是为了好玩,这里的设计大纲将统计信息封装在Stats
类中,并使用枚举来限制输入统计信息名称。在此示例中,我们使用扫描程序从标准输入读取统计信息。
class Example
{
public static void main(String[] args) {
System.out.print("Enter stats: ");
Stats stats = new Stats();
int statCount = Stat.values().length;
java.util.Scanner scanner = new java.util.Scanner(System.in);
for (int i = 0; i < statCount; i++) {
String statName = scanner.next();
Stat stat = Stat.valueOf(statName);
stat.set(stats, scanner);
System.out.println(stats);
}
}
static class Stats {
int speed, health, power;
float accuracy;
public String toString() {
StringBuilder sb = new StringBuilder(50);
for (Stat stat: Stat.values()) {
sb.append(stat).append(' ').append(stat.get(this)).append(' ');
}
return sb.toString();
}
}
enum Stat {
speed, health, power, accuracy;
String get(Stats stats) {
switch(this) {
case speed: return String.valueOf(stats.speed);
case health: return String.valueOf(stats.health);
case power: return String.valueOf(stats.power);
case accuracy: return String.valueOf(stats.accuracy);
default: throw new IllegalStateException(String.valueOf(this));
}
}
double set(Stats stats, Scanner scanner) {
switch (this) {
case speed: return stats.speed = scanner.nextInt();
case health: return stats.health = scanner.nextInt();
case power: return stats.power = scanner.nextInt();
case accuracy: return stats.accuracy = scanner.nextFloat();
default: throw new IllegalStateException(String.valueOf(this));
}
}
}
}