Server crasht bei math.Random

Dieses Thema im Forum "Programmierung" wurde erstellt von To_Bii, 26. Juli 2014.

  1. To_Bii
    Offline

    To_Bii

    Registriert seit:
    27. Januar 2014
    Beiträge:
    14
    Hallo zusammen....

    Ich hab da nen Problem mit nem eigenem Plugin...

    Die stelle um die es geht ist folgende:
    Code (Text):
    1.   private int getAttribut(boolean isArmor) {
    2.           int attribut = this.giveRandom(13);
    3.           while(!isArmor&&(attribut!=3||attribut<9)){
    4.             attribut= this.giveRandom(13);  
    5.           }
    6.           while(isArmor&&(attribut==3||attribut>9)){
    7.                 attribut= this.giveRandom(13);  
    8.               }
    9.           return attribut;
    10.          }
    11.      private int giveRandom(int scale){
    12.          return (int) (Math.random() * scale + 1);
    13.      }
    Der Fehler der nach dem Servercrash kommt ist folgender:
    Code (Text):
    1. [12:28:48 ERROR]: The server has stopped responding!
    2. [12:28:48 ERROR]: Please report this to http://www.spigotmc.org/
    3. [12:28:48 ERROR]: Be sure to include ALL relevant console errors and Minecraft crash reports
    4. [12:28:48 ERROR]: Spigot version: git-Spigot-1360 (MC: 1.7.5)
    5. [12:28:48 ERROR]: ------------------------------
    6. [12:28:48 ERROR]: Server thread dump (Look for plugins here before reporting to Spigot!):
    7. [12:28:48 ERROR]: ------------------------------
    8. [12:28:48 ERROR]: Current Thread: Server thread
    9. [12:28:48 ERROR]:       PID: 13 | Suspended: false | Native: false | State: RUNNABLE
    10. [12:28:48 ERROR]:       Stack:
    11. [12:28:48 ERROR]:               java.util.Random.next(Random.java:189)
    12. [12:28:48 ERROR]:               java.util.Random.nextDouble(Random.java:444)
    13. [12:28:48 ERROR]:               java.lang.Math.random(Math.java:716)
    14. [12:28:48 ERROR]:               com.faldoria.rpg.item.ItemCalculator.giveRandom(ItemCalculator.java:748)
    15. [12:28:48 ERROR]:               com.faldoria.rpg.item.ItemCalculator.getAttribut(ItemCalculator.java:733)
    16. [12:28:48 ERROR]:               com.faldoria.rpg.item.ItemCalculator.getAttribute(ItemCalculator.java:722)
    17. [12:28:48 ERROR]:               com.faldoria.rpg.item.ItemCalculator.giveItemAttributes(ItemCalculator.java:196)
    18. [12:28:48 ERROR]:               com.faldoria.rpg.item.ItemCalculator.giveDrop(ItemCalculator.java:752)
    19. [12:28:48 ERROR]:               com.faldoria.rpg.listener.RPGListener.onKillEntity(RPGListener.java:165)
    20. [12:28:48 ERROR]:               sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    21. [12:28:48 ERROR]:               sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    22. [12:28:48 ERROR]:               sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    23. [12:28:48 ERROR]:               java.lang.reflect.Method.invoke(Method.java:601)
    24. [12:28:48 ERROR]:               org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:292)
    25. [12:28:48 ERROR]:               org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
    26. [12:28:48 ERROR]:               org.bukkit.plugin.TimedRegisteredListener.callEvent(TimedRegisteredListener.java:30)
    27. [12:28:48 ERROR]:               org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502)
    28. [12:28:48 ERROR]:               org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487)
    29. [12:28:48 ERROR]:               org.bukkit.craftbukkit.v1_7_R2.event.CraftEventFactory.callEntityDeathEvent(CraftEventFactory.java:349)
    30. [12:28:48 ERROR]:               net.minecraft.server.v1_7_R2.EntityChicken.dropDeathLoot(EntityChicken.java:106)
    31. [12:28:48 ERROR]:               net.minecraft.server.v1_7_R2.EntityLiving.die(EntityLiving.java:791)
    32. [12:28:48 ERROR]:               net.minecraft.server.v1_7_R2.EntityLiving.damageEntity(EntityLiving.java:739)
    33. [12:28:48 ERROR]:               net.minecraft.server.v1_7_R2.EntityAnimal.damageEntity(SourceFile:145)
    34. [12:28:48 ERROR]:               org.bukkit.craftbukkit.v1_7_R2.entity.CraftLivingEntity.damage(CraftLivingEntity.java:203)
    35. [12:28:48 ERROR]:               org.bukkit.craftbukkit.v1_7_R2.entity.CraftLivingEntity.damage(CraftLivingEntity.java:188)
    36. [12:28:48 ERROR]:               com.faldoria.rpg.skills.skills.DanceOfDagger.use(DanceOfDagger.java:40)
    37. [12:28:48 ERROR]:               com.faldoria.rpg.skills.types.ActiveSkill.handleU(ActiveSkill.java:131)
    38. [12:28:48 ERROR]:               com.faldoria.rpg.player.PlayerObject.handleSlotUse(PlayerObject.java:123)
    39. [12:28:48 ERROR]:               com.faldoria.rpg.listener.RPGListener.onPlayerInteractEvent(RPGListener.java:54)
    40. [12:28:48 ERROR]:               sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
    41. [12:28:48 ERROR]:               sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    42. [12:28:48 ERROR]:               java.lang.reflect.Method.invoke(Method.java:601)
    43. [12:28:48 ERROR]:               org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:292)
    44. [12:28:48 ERROR]:               org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
    45. [12:28:48 ERROR]:               org.bukkit.plugin.TimedRegisteredListener.callEvent(TimedRegisteredListener.java:30)
    46. [12:28:48 ERROR]:               org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502)
    47. [12:28:48 ERROR]:               org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487)
    48. [12:28:48 ERROR]:               org.bukkit.craftbukkit.v1_7_R2.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:212)
    49. [12:28:48 ERROR]:               org.bukkit.craftbukkit.v1_7_R2.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:182)
    50. [12:28:48 ERROR]:               net.minecraft.server.v1_7_R2.PlayerConnection.a(PlayerConnection.java:617)
    51. [12:28:48 ERROR]:               net.minecraft.server.v1_7_R2.PacketPlayInBlockPlace.a(SourceFile:60)
    52. [12:28:48 ERROR]:               net.minecraft.server.v1_7_R2.PacketPlayInBlockPlace.handle(SourceFile:9)
    53. [12:28:48 ERROR]:               net.minecraft.server.v1_7_R2.NetworkManager.a(NetworkManager.java:148)
    54. [12:28:48 ERROR]:               net.minecraft.server.v1_7_R2.ServerConnection.c(ServerConnection.java:77)
    55. [12:28:48 ERROR]:               net.minecraft.server.v1_7_R2.MinecraftServer.v(MinecraftServer.java:703)
    56. [12:28:48 ERROR]:               net.minecraft.server.v1_7_R2.DedicatedServer.v(DedicatedServer.java:273)
    57. [12:28:48 ERROR]:               net.minecraft.server.v1_7_R2.MinecraftServer.u(MinecraftServer.java:566)
    58. [12:28:48 ERROR]:       Stack:
    59. [12:28:48 ERROR]:               java.lang.Object.wait(Native Method)
    60. [12:28:48 ERROR]:               java.lang.Object.wait(Object.java:503)
    61. [12:28:48 ERROR]:               java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)
    62. [12:28:48 ERROR]: ------------------------------
    63. [12:28:48 INFO]: Startup script './start.sh' does not exist! Stopping server.
    Also es liegt an dieser Stelle...

    hat jemand ne Ahnung warum der dort abschmiert?

    grüße
     
    #1
  2. NickStylez
    Offline

    NickStylez

    Registriert seit:
    23. Oktober 2012
    Beiträge:
    3
    Minecraft:
    NickStylez
    Anstelle von:

    return (int) (Math.random() * scale + 1);

    ... versuchs mit:

    return (int) ((Math.random() * scale) + 1);

    Dürfte funktionieren :)
     
    #2
  3. skyshiny99
    Offline

    skyshiny99

    Registriert seit:
    2. Oktober 2012
    Beiträge:
    32
    So, hab mir das nun angeschaut. Am giveRandom() liegts nicht!
    Es geht eher um diesen netten Codeteil:

    Code (Text):
    1.           while(!isArmor&&(attribut!=3||attribut<9)){
    2.             attribut= giveRandom(13);  
    3.           }
    Trifft dementsprechend nur bei getAttribut(false) zu.

    Genau genommen gehts da drum:
    Code (Text):
    1. while(!isArmor ...)
    isArmor wird natürlich nicht geändert, somit kann das nur in einer Endlosschleife resultieren. Gilt in der anderen while-Schleife genauso, hier ist isArmor nur true!

    Das ist nun aber nicht das Einzige. Hier geht es weiter:
    Code (Text):
    1. ... (attribut!=3||attribut<9))
    Solange das Attribut nicht 3 ist, wird die Schleife fortgesetzt. Wenn das Attribut aber auf 3 gesetzt ist, trifft die zweite Bedingung zu, da das Attribut unter der Zahl 9 ist. Resultat: Die nächste Endlosschleife^^

    Wenn ich davon ausgehe, dass beide Bedingungen und nicht nur eine erfüllt sein sollen, ist es so richtig:

    Code (Text):
    1. private int getAttribut(boolean isArmor) {
    2.         int attribut = giveRandom(13);
    3.         if (!isArmor) {
    4.             while (attribut != 3 && attribut < 9) {
    5.                 attribut = giveRandom(13);
    6.             }
    7.         } else {
    8.             while (attribut == 3 && attribut > 9) {
    9.                 attribut = giveRandom(13);
    10.             }
    11.         }
    12.         return attribut;
    13.     }
    14.  
    15.     private int giveRandom(int scale) {
    16.         return (int) ((Math.random() * scale) + 1);
    17.     }
     
    #3
  4. ShareLock
    Offline

    ShareLock

    Registriert seit:
    2. November 2011
    Beiträge:
    70
    Java unterscheidet keine Klammern, also ist dies äquivalent.

    [Veralteter Inhalt entfernt]

    methode() wäre äquivalent zu this.methode();

    Wahrscheinlich handelt es sich hier um einen Stackoverflow. Du generierst ein Attribut, aber die whileSchleife endet nie.

    Sinnvoller wäre es hier einfach mal den Spagetti Code aufzuräumen und sowas nennt sich schon Programmierer? ^^ - Naja, das ist nicht mein Bier.
     
    #4