-1
基本上,每當我在服務器中輸入某個命令時,它會多次加載所有代碼(20+)。由於某種原因,每當我輸入命令時,服務器都會凍結(包括控制檯)。如果我停止服務器並重新啓動服務器,則說服務器正在運行的端口綁定了一些內容,導致我不得不中止服務器進程。是否因爲我發佈命令時運行的計算太多了?我記得它之前沒有崩潰,但是在我改變百分比計算方法後,它每次都崩潰。未知錯誤崩潰服務器 - 控制檯也崩潰
package com.mcvigor.utils;
import java.util.ArrayList;
import org.apache.commons.lang.WordUtils;
import org.bukkit.ChatColor;
import org.bukkit.inventory.meta.ItemMeta;
import com.mcvigor.RunePlayer;
import com.mcvigor.Skills;
public class ItemUtils {
public static ItemMeta addSkillInformation(ItemMeta i, Skills skill, RunePlayer rp) {
i.setDisplayName(ChatColor.GOLD + WordUtils.capitalize(skill.toString().toLowerCase()));
ArrayList<String> lore = new ArrayList<String>();
lore.add(ChatColor.RED + "Level " + ChatColor.YELLOW + rp.getSkillLevel(skill));
int xp = rp.getSkillXP(skill);
int neededXP = rp.getXPRequiredForLevel((rp.getSkillLevel(skill) + 1));
lore.add(ChatColor.RED + "Experience: " + ChatColor.YELLOW + xp + ChatColor.RED + "/" + ChatColor.YELLOW + neededXP);
lore.add(ChatColor.RED + "Remainder: " + ChatColor.YELLOW + (neededXP - xp));
float percent = (xp/neededXP);
int percent10 = (int) Math.floor(percent * 10);
String bar = "";
while (percent10 >= 10) {
bar += ChatColor.GREEN + "▀";
percent--;
}
while (percent10 < 10) {
bar += ChatColor.RED + "▀";
percent10--;
}
lore.add(ChatColor.RED + "Percent to next level: " + ChatColor.YELLOW + (int) percent + ChatColor.RED + "%");
lore.add(bar);
i.setLore(lore);
return i;
}
}
編輯: 想是因爲它:
while (percent10 < 10) {
bar += ChatColor.RED + "▀";
percent10--;
}
percent10將始終低於10,因此將繼續重複。
'while(percent10 <10)...' – johnchen902
因此百分比爲< 1 and > = 0,因此可能的最大循環次數爲10次。此外,僅在執行命令遊戲時才調用此方法。 – user2510422
*「可能的最大循環次數是10」*。我想你不明白我的答案。由於您不會更改循環結束條件中使用的變量,因此此循環無法結束。 –