private char whatThing() {
double random = Math.random();
String f = String.format("%.2f", random);
double formattedRandom = Double.parseDouble(f);
if(formattedRandom < 0.33) {
return 'R';
} else if(formattedRandom >= 0.33 && formattedRandom < 0.66) {
return 'P';
} else {
return 'S';
}
}
Выводит ошибку NumberFormatException:
Exception in thread "main" java.lang.NumberFormatException: For input string: "0,47" at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source) at sun.misc.FloatingDecimal.parseDouble(Unknown Source) at java.lang.Double.parseDouble(Unknown Source) at RPSEngine.whatThing(RPSEngine.java:28) at RPSEngine.(RPSEngine.java:8) at RPSSheath.(RPSSheath.java:30) at RPSSheath.main(RPSSheath.java:43)
Чтобы получить число с точностью до двух цифр после запятой, нужно указать следующее выражение:
%1$,.2f
Таким образом код будет выглядеть так:
double number = Math.random();
String str = String.format("%1$,.2f", number);
System.out.println(number);
System.out.println(str);
0.3086820994984767
0.31
Вот такой вариант делает тоже самое, но проще
private char whatThing() {
final Random random = new Random();
int choice = random.nextInt(2);
switch (choice) {
case 0:
return 'R';
case 1:
return 'P';
default:
return 'S';
}
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей