#java
#java
Вопрос:
Я должен предварить это, сказав, что я ОЧЕНЬ новичок в кодировании и Java в целом; простите мою глупость! Я пытаюсь настроить систему состояния для игрока на основе того, сколько у него здоровья, при этом их текущий статус представляет собой строку, участвующую в функции переключения, которая изменяется с «У тебя все хорошо!» на «Ты умираешь!». Однако вместо того, чтобы делать это с помощью однозначных цифр, я хочу сделать это с процентом работоспособности, чтобы сообщение не менялось при достижении 50 или 25 процентов здоровья, независимо от того, имеет ли игрок 50 или 10 здоровья максимум.
По сути, я хочу сделать так, чтобы вместо отдельных переменных, представляющих определенные значения работоспособности в функции переключения, использовались проценты PCHealth. Это то, чего я не хочу, но что я знаю, как сделать:
int PCHealth = 10;
String Status = "";
switch (PCHealth) {
case 5: Status = "You're fine!";
case 2: Status = "You're dying!";
}
Вот что я хочу набросать в поддельном коде:
int PCHealth = 10;
String Status = "';
switch (PCHealth) {
case [50% of PCHealth] = "You're fine!";
case [20 % of PCHealth] = "You're dying!";
}
Спасибо!
Комментарии:
1. вы можете оценить эти значения перед переключением и сохранить их в переменной, а затем поместить эту переменную внутрь switch
Ответ №1:
Просто сделайте это с помощью if-else
. Это очень просто и полезно для понимания.
public String getStatus(int PChealth, int maxValue) {
float percent = (PChealth * 1.0f) / maxValue;
if (percent > 75) return "great";
else if (percent > 50) return "mid";
else if (percent > 25) return "not good";
else if (PChealth == 0) return "dead";
else return "bad";
}
Примечания к стороне: Первое, if
которое вычисляется true
, вернет правильное значение.
Подкованный?
Ответ №2:
/*
Things that you will need to know
- integer division vs double
- type casting
- Math.ceil()
# int division
10/25 --> 0
# double division
10.0/25 --> 0.4
# Math.ceil()
Math.ceil(0.4) --> 1.0
0-25 XXX
25-50 fine
50-75 good
75-100 great
*/
Поиграйте с этим кодом, распечатайте вещи, которые вы не понимаете, или какое значение они имеют… Я пытался упростить ситуацию.
public class MyClass {
private static int maxHealth = 100;
public static String getPlayerHealthStatus(double pHealth){
String pHStatus = "";
int pHealth_case = (int) Math.ceil( pHealth / (maxHealth / 4));
switch (pHealth_case) {
case 4:
pHStatus = "You're doing great!";
break;
case 3:
pHStatus = "You're doing good!";
break;
case 2:
pHStatus = "You're fine!";
break;
case 1:
pHStatus = "You're dying!";
break;
case 0:
pHStatus = "You died!";
break;
default:
pHStatus = "invalid player health";
}
return pHStatus;
}
public static void main(String args[]) {
int playerHealth = 90;
System.out.println("player health: " playerHealth " status: " getPlayerHealthStatus(playerHealth));
playerHealth = 70;
System.out.println("player health: " playerHealth " status: " getPlayerHealthStatus(playerHealth));
playerHealth = 40;
System.out.println("player health: " playerHealth " status: " getPlayerHealthStatus(playerHealth));
playerHealth = 20;
System.out.println("player health: " playerHealth " status: " getPlayerHealthStatus(playerHealth));
playerHealth = 0;
System.out.println("player health: " playerHealth " status: " getPlayerHealthStatus(playerHealth));
}
}
Вывод:
player health: 90 status: You're doing great!
player health: 70 status: You're doing good!
player health: 40 status: You're fine!
player health: 20 status: You're dying!
player health: 0 status: You died!
Ответ №3:
Невозможно иметь выражения в операторах case, use if-else
или, как сказал @Onkar, сохранять их в отдельной переменной.
if-else
должно быть чище для вашего варианта использования.
Ответ №4:
Я бы сохранил максимальное состояние работоспособности в переменной MaxHealth
, а затем попробовал следующий переключатель! 🙂
Здесь у нас есть if
оператор в switch
инструкции, который будет выполнять случай 1, если работоспособность составляет от 0 до 20% и так далее
double PCHealth = __ ;
switch (((0 <= PCHealth amp;amp; PCHealth <= (0.2 * MaxHealth)) ? 0 :
((0.2 * MaxHealth) > PCHealth amp;amp; (0.5 * MaxHealth) < PCHealth) ? 1 : 2)
{
case 0:
Status = "You're dying!";
break;
case 1:
Status = "You're fine!";
break;
case 2:
Status = "You're doing excelent";
break;
}