Fragen zu HashMaps

Cury

Aktives Mitglied
Hallo alle,
Ich bin dabei ein Plugin zuschreiben, welches einem Spieler ermöglicht, seine Spitzhacken durch das abbauen von Blöcken zu leveln. Für jeden abgebauten Block soll die Spitzhacke 1 XP bekommen. Diese Xp werden in der Lore des Items gesetzt.
Problem:
Ich habe es bis jetzt mit einer einzigen Variable gemacht. Dies funktioniert natürlich nicht, da dann auf allen Spitzhacken der Gleiche wert ist. Ich habe versucht das folgendermaßen zu lösen:

ItemStack i = p.getItemInHand();
HashMap<ItemStack, Integer> level = new HashMap<>();
int xp= level.get(i);
xp++;
level.put(i, xpd);


Bei dieser Variante bekomme ich eine NullPointerExeption. Diese entsteht bei der Inizialisierung von int xp.

Ich versuche in der HashMap die Xp Anzahl, die für die abgebauten Blöcke stehen, in dem ItemStack, also der Spitzhacke zu speichern, dann zu getten, beim abbauen 1 hochzusetzten, und dann wieder in der HashMap zu Speichern.

Ich fände es toll wenn mir jemand helfen könnte.
Das ist das einzige was noch nicht geht. Alles andere klappt fehlerlos.

LG Julius
 
K

kneitzel

Gast
Falls die paar Zeilen Code so zusammen in einer Methode stehen, dann ist das selbstverständlich, denn du erzeugst ja ständig eine neue HashMap die dann nur in einer lokalen Variable gespeichert ist.
 

Cury

Aktives Mitglied
Jetzt wird es hochgezählt, allerdings sehr unregelmäßig, aslo alle 10 Blöcke doer so und nach 10 gefarmten blöcken wird die Hashmap wieder gecleart
 
K

kneitzel

Gast
Kannst Du uns mehr von dem Code zeigen? Ohne Details wird Dir hier kaum jemand helfen können fürchte ich.
 
X

Xyz1

Gast
Das ist wie Raten...
Bitte mehr Code, Erklärungen usw usf ...
Und achte etwas auf Deine Rechtschreibung...
Und - wie man Fragen stellen sollte im Allgemeinen.
Danke.
 
K

kneitzel

Gast
Wie ist der HashCode von ItemStack implementiert? Ist sicher gestellt, dass der HashCode der ItemStack Instanzen sich nicht verändert mit der Zeit? Das wäre jetzt eine Möglichkeit, die mir einfällt. Der Code selbst ist recht unübersichtlich- jetzt auf dem Handy ist da ein Überblick schwer. Aber der Code verschreckt etwas ... wie lang ist da eine Methode? Und die vielen if else if .... aber ich schaue mal, dass ich da morgen evtl. noch das eine oder andere dazu schreibe ....
 

Cury

Aktives Mitglied
Danke an alle die mir hier Lösungsvorschläge geschickt haben. Ich habe jetzt eine mögliche Lösung gefunden.
Der Fehler war, dass die Items zu 100% gleich sind und deshalb nimmt er immer den gleichn wert. Hat jemand eine Idee in welcher Form Items unterschiedlich sind, oder wie man sie unterschiedlich machen kann.
Mit dem Displayname würde es halt gehen, aber dann könnte man die Items umbenennen.

Gibt es bei Items sowas wie UUID, wie bei Spielern?
 
K

kneitzel

Gast
Wenn Du Klassen schreibst, dann kannst Du da auch eine UUID einfügen. Es liegt doch an Dir als Entwickler, vorzugeben, was welche Klasse beinhalten soll.

Somit kannst Du in eine Klasse einbauen:
Java:
private UUID id = UUID.randomUUID();
public UUID getId() { return id; }

Edit: Wobei die Frage ist, ob so etwas überhaupt notwendig ist. Du hast doch unterschiedliche Instanzen und die wirst Du doch auseinander halten können. (Und da liegt es an Dir, vernünftige equals und hashcode Methoden zu definieren!)
 
K

kneitzel

Gast
Und da Du den Code wieder raus gelöscht hast aus dem Link wird es dazu auch kein Feedback mehr geben können.
 

Cury

Aktives Mitglied
Ok danke. Den Code kann ich nochmal schicken.

Also kann ich items eine Rnadom UUID geben und dann die UUID in die HashMap packen?
Mein Ziel ist halt, dass alle Items einzigartig sind und dann diese Einzigartigkeit in die HashMap zu packen.
 
K

kneitzel

Gast
Das ist EINE Möglichkeit. Die Frage ist aber doch: Brauchst Du diese Art der Identifikation wirklich? Nach meinem Verständnis hast Du aber unterschiedliche Instanzen und die sind doch schon per se unterschiedlich. Daher macht es aus meiner Sicht derzeit wenig Sinn, da so eine UUID einzufügen.

Die Punkte, die also zu klären wären:
a) Wieso werden zwei Instanzen als gleich angesehen? Was hast Du da für Code drinnen? Die equals Methode von Object sollte zwei Instanzen sauber auseinander halten auch wenn die Instanzvariablen gleich sind. Also wirst Du da eine equals Methode geschrieben haben (oder schreiben lassen, falls Du z.B. Lombok einsetzt).
b) Die Problematik wird dann evtl. auch kritisch, wenn Du etwas nutzt, dass mit Hashcodes arbeitet. Es ist absolut kritisch, wenn Du einen Key nutzt, der sich verändert und dabei der hashcode auch verändert wird. Dann wird ein key plötzlich nicht mehr gefunden und so.

==> Statt irgendwelcher "schneller Fixes" wäre mein Ratschlag, sich die Details genau anzusehen und zu begreifen, was wieso passiert. So eine schnelle Behebung führt zu mehreren Dingen:
- zu komplizierter Code, da Dinge enthalten sind, die unnötig sind.
- fehlerhafter Code - Du wirst Dinge haben, die nicht das machen, was Du erwartest. Das führt schnell zu Folgefehlern die dann immer schwerer zu finden und zu diagnostizieren sind.
- Nicht wartbarer Code, da Code schlicht nicht im Detail verstanden wurde.
 

Cury

Aktives Mitglied
Hier nochmal der Code:

Java:
HashMap<String, Integer> dia = new HashMap<>();
	
	@EventHandler
	public void onBreak(BlockBreakEvent e) {
		Player p = e.getPlayer();
		if(p.getLocation().getWorld().getName().equals("world")) {
		
		if(p.getItemInHand().getType() == Material.DIAMOND_PICKAXE) {
			final ItemStack i = p.getItemInHand();
			ItemMeta im = i.getItemMeta();
			if(i.getItemMeta().getLore().contains("§6§lUpgrade I")) {
				
				if(i.getItemMeta().getLore().contains("§6Level: §715")) {
					return;
				}
				
				if(i.getItemMeta().getLore().contains("§6Level: §71") || i.getItemMeta().getLore().contains("§6Level: §72") || i.getItemMeta().getLore().contains("§6Level: §73") || i.getItemMeta().getLore().contains("§6Level: §74") ||i.getItemMeta().getLore().contains("§6Level: §75") || i.getItemMeta().getLore().contains("§6Level: §76") || i.getItemMeta().getLore().contains("§6Level: §77") || i.getItemMeta().getLore().contains("§6Level: §78") || i.getItemMeta().getLore().contains("§6Level: §79") || i.getItemMeta().getLore().contains("§6Level: §710") || i.getItemMeta().getLore().contains("§6Level: §711") || i.getItemMeta().getLore().contains("§6Level: §712") || i.getItemMeta().getLore().contains("§6Level: §713") || i.getItemMeta().getLore().contains("§6Level: §714") || i.getItemMeta().getLore().contains("§6Level: §715")) {
					
					int xpd = dia.getOrDefault(i.getItemMeta().getDisplayName(), 0);
					xpd++;
					dia.put(i.getItemMeta().getDisplayName(), xpd);
					
					
					if(xpd < 200 && xpd > 0) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§6200 XP", "§6Level: §71", " ", "§6§lUpgrade I"));
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd == 200) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§6600 XP", "§6Level: §72", " ", "§6§lUpgrade I"));
						p.sendMessage(Main.pre + "§aDeine Spitzhacke ist nun §6Level 2");
						p.playSound(p.getLocation(), Sound.LEVEL_UP, 1L, 1L);
						im.addEnchant(Enchantment.DIG_SPEED, 1, false);
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd < 600 && xpd > 200) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§6600 XP", "§6Level: §72", " ", "§6§lUpgrade I"));
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd == 600) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§61500 XP", "§6Level: §73", " ", "§6§lUpgrade I"));
						p.sendMessage(Main.pre + "§aDeine Spitzhacke ist nun §6Level 3");
						p.playSound(p.getLocation(), Sound.LEVEL_UP, 1L, 1L);
						im.addEnchant(Enchantment.DIG_SPEED, 2, false);
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd < 1500 && xpd > 600) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§61500 XP", "§6Level: §73", " ", "§6§lUpgrade I"));
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd == 1500) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§65000 XP", "§6Level: §74", " ", "§6§lUpgrade I"));
						p.sendMessage(Main.pre + "§aDeine Spitzhacke ist nun §6Level 4");
						p.playSound(p.getLocation(), Sound.LEVEL_UP, 1L, 1L);
						im.addEnchant(Enchantment.DURABILITY, 1, false);
						im.addEnchant(Enchantment.DIG_SPEED, 2, false);
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd < 5000 && xpd > 1500) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§65000 XP", "§6Level: §74", " ", "§6§lUpgrade I"));
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd == 5000) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§615000 XP", "§6Level: §75", " ", "§6§lUpgrade I"));
						p.sendMessage(Main.pre + "§aDeine Spitzhacke ist nun §6Level 5");
						p.playSound(p.getLocation(), Sound.LEVEL_UP, 1L, 1L);
						im.addEnchant(Enchantment.DURABILITY, 2, false);
						im.addEnchant(Enchantment.DIG_SPEED, 2, false);
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd < 15000 && xpd > 5000) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§615000 XP", "§6Level: §75", " ", "§6§lUpgrade I"));
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd == 5000) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§615000 XP", "§6Level: §75", " ", "§6§lUpgrade I"));
						p.sendMessage(Main.pre + "§aDeine Spitzhacke ist nun §6Level 5");
						p.playSound(p.getLocation(), Sound.LEVEL_UP, 1L, 1L);
						im.addEnchant(Enchantment.DURABILITY, 3, false);
						im.addEnchant(Enchantment.DIG_SPEED, 3, false);
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd < 15000 && xpd > 5000) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§615000 XP", "§6Level: §75", " ", "§6§lUpgrade I"));
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd == 15000) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§630000 XP", "§6Level: §76", " ", "§6§lUpgrade I"));
						p.sendMessage(Main.pre + "§aDeine Spitzhacke ist nun §6Level 6");
						p.playSound(p.getLocation(), Sound.LEVEL_UP, 1L, 1L);
						im.addEnchant(Enchantment.DURABILITY, 4, true);
						im.addEnchant(Enchantment.DIG_SPEED, 4, false);
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd < 30000 && xpd > 15000) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§630000 XP", "§6Level: §76", " ", "§6§lUpgrade I"));
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd == 30000) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§670000 XP", "§6Level: §77", " ", "§6§lUpgrade I"));
						p.sendMessage(Main.pre + "§aDeine Spitzhacke ist nun §6Level 7");
						p.playSound(p.getLocation(), Sound.LEVEL_UP, 1L, 1L);
						im.addEnchant(Enchantment.DURABILITY, 5, true);
						im.addEnchant(Enchantment.DIG_SPEED, 5, false);
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd < 70000 && xpd > 30000) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§670000 XP", "§6Level: §77", " ", "§6§lUpgrade I"));
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd == 70000) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§6150000 XP", "§6Level: §78", " ", "§6§lUpgrade I"));
						p.sendMessage(Main.pre + "§aDeine Spitzhacke ist nun §6Level 8");
						p.playSound(p.getLocation(), Sound.LEVEL_UP, 1L, 1L);
						im.addEnchant(Enchantment.DURABILITY, 5, true);
						im.addEnchant(Enchantment.DIG_SPEED, 6, true);
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd < 150000 && xpd > 70000) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§6150000 XP", "§6Level: §78", " ", "§6§lUpgrade I"));
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd == 150000) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§6300000 XP", "§6Level: §79", " ", "§6§lUpgrade I"));
						p.sendMessage(Main.pre + "§aDeine Spitzhacke ist nun §6Level 9");
						p.playSound(p.getLocation(), Sound.LEVEL_UP, 1L, 1L);
						im.addEnchant(Enchantment.DURABILITY, 5, true);
						im.addEnchant(Enchantment.DIG_SPEED, 7, true);
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd < 300000 && xpd > 150000) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§6300000 XP", "§6Level: §79", " ", "§6§lUpgrade I"));
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd == 300000) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§6700000 XP", "§6Level: §710", " ", "§6§lUpgrade I"));
						p.sendMessage(Main.pre + "§aDeine Spitzhacke ist nun §6Level 10");
						p.playSound(p.getLocation(), Sound.LEVEL_UP, 1L, 1L);
						im.addEnchant(Enchantment.DURABILITY, 5, true);
						im.addEnchant(Enchantment.DIG_SPEED, 7, true);
						im.addEnchant(Enchantment.LOOT_BONUS_BLOCKS, 1, false);
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd < 700000 && xpd > 300000) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§6700000 XP", "§6Level: §710", " ", "§6§lUpgrade I"));
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd == 700000) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§61200000 XP", "§6Level: §711", " ", "§6§lUpgrade I"));
						p.sendMessage(Main.pre + "§aDeine Spitzhacke ist nun §6Level 11");
						p.playSound(p.getLocation(), Sound.LEVEL_UP, 1L, 1L);
						im.addEnchant(Enchantment.DURABILITY, 6, true);
						im.addEnchant(Enchantment.DIG_SPEED, 7, true);
						im.addEnchant(Enchantment.LOOT_BONUS_BLOCKS, 1, false);
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd < 1200000 && xpd > 700000) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§61200000 XP", "§6Level: §711", " ", "§6§lUpgrade I", "§6§lLevel I"));
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd == 1200000) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§62000000 XP", "§6Level: §712", " ", "§6§lUpgrade I",  "§6§lLevel I"));
						p.sendMessage(Main.pre + "§aDeine Spitzhacke ist nun §6Level 12");
						p.playSound(p.getLocation(), Sound.LEVEL_UP, 1L, 1L);
						im.addEnchant(Enchantment.DURABILITY, 7, true);
						im.addEnchant(Enchantment.DIG_SPEED, 8, true);
						im.addEnchant(Enchantment.LOOT_BONUS_BLOCKS, 1, false);
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd < 2000000 && xpd > 1200000) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§62000000 XP", "§6Level: §712", " ", "§6§lUpgrade I", "§6§lLevel I"));
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd == 2000000) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§63400000 XP", "§6Level: §713", " ", "§6§lUpgrade I", "§6§lLevel I"));
						p.sendMessage(Main.pre + "§aDeine Spitzhacke ist nun §6Level 13");
						p.playSound(p.getLocation(), Sound.LEVEL_UP, 1L, 1L);
						im.addEnchant(Enchantment.DURABILITY, 7, true);
						im.addEnchant(Enchantment.DIG_SPEED, 10, true);
						im.addEnchant(Enchantment.LOOT_BONUS_BLOCKS, 1, false);
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd < 3400000 && xpd > 2000000) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§63400000 XP", "§6Level: §713", " ", "§6§lUpgrade I", "§6§lLevel I"));
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd == 3400000) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§65000000 XP", "§6Level: §714", " ", "§6§lUpgrade I", "§6§lLevel I"));
						p.sendMessage(Main.pre + "§aDeine Spitzhacke ist nun §6Level 14");
						p.playSound(p.getLocation(), Sound.LEVEL_UP, 1L, 1L);
						im.addEnchant(Enchantment.DURABILITY, 8, true);
						im.addEnchant(Enchantment.DIG_SPEED, 11, true);
						im.addEnchant(Enchantment.LOOT_BONUS_BLOCKS, 2, false);
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd < 5000000 && xpd > 3400000) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§65000000 XP", "§6Level: §714", " ", "§6§lUpgrade I", "§6§lLevel I"));
						i.setItemMeta(im);
						p.updateInventory();
					}else if(xpd == 5000000) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§67300000 XP", "§6Level: §715", " ", "§6§lUpgrade I", "§6§lLevel I"));
						p.sendMessage(Main.pre + "§aDeine Spitzhacke ist nun §6Level 15");
						p.playSound(p.getLocation(), Sound.LEVEL_UP, 1L, 1L);
						im.addEnchant(Enchantment.DURABILITY, 10, true);
						im.addEnchant(Enchantment.DIG_SPEED, 14, true);
						im.addEnchant(Enchantment.LOOT_BONUS_BLOCKS, 2, false);
						i.setItemMeta(im);
						p.updateInventory();
						
						Firework firework = p.getWorld().spawn(p.getLocation(), Firework.class);
						FireworkEffect effect = FireworkEffect.builder()
								.withColor(Color.RED)
								.flicker(true)
								.trail(true)
								.withFade(Color.AQUA)
								.with(FireworkEffect.Type.BALL_LARGE)
								.build();
								
								FireworkMeta meta = firework.getFireworkMeta();
								meta.addEffect(effect);
								meta.setPower(1);
								
								firework.setFireworkMeta(meta);
								
					}else if(xpd < 7300000 && xpd > 5000000) {
						im.setLore(Arrays.asList(" ", "§6" + xpd + "§7/§67300000 XP", "§6Level: §715", " ", "§6§lUpgrade I", "§6§lLevel I"));
						i.setItemMeta(im);
						p.updateInventory();
					}
				
					
					
					
				
			}else {
			im.setLore(Arrays.asList(" ", "§61§7/§6200 XP", "§6Level: §71", " ", "§6§lUpgrade I"));
			i.setItemMeta(im);
			p.updateInventory();
			return;
			}
			
			}else return;
		}
 
Zuletzt bearbeitet von einem Moderator:

Flown

Administrator
Mitarbeiter
Wäre nett wenn du das nächste mal Code-Tags verwenden würdest: [code=java]//JAVA CODE HERE[/code]
 
K

kneitzel

Gast
Hmm, da hast Du jetzt paar Anpassungen drin, die vorher nicht da waren. So ist es jetzt eine HashMap mit einem String als key. Das war vorher nicht so. Wenn Du da den DisplayName wählst, ist die Frage tatsächlich, ob der eindeutig ist. Wenn der nicht eindeutig ist, dann kommt es zu dem, was Du schon erwähnt hast....

Paar Hinweise zu dem Code:
a) p.getLocation().getWorld().getName().equals("world") ist ein Konstrukt, welches ich kritisch finde. Deine Klasse hat eine Abhängigkeit zu Location, was ok ist, aber dann geht es noch weiter mit Wissen über die Welt und dass diese einen Namen hat und dass es eine spezielle Welt mit Namen "world" gibt.
==> Die Konstanten sollten nicht als Literale im Code stehen sondern als Konstanten definiert sein. Also hier in World (oder wie die Klasse heissen mag) ein "public static final String MAIN_WORLD_NAME = "world"; oder so. Und das Wissen, wann eine Welt die Hauptwelt ist, gehört auch in die Welt Klasse. Also sowas wie:
Java:
  public boolean isMainWorld() {
      return getName().equals(MAIN_WORLD_NAME);
  }
(Vereinfacht dargestellt. Validierung vom Namen wird evtl. noch gewünscht, um eine NPE zu vermeiden oder so ...)
==> Was bedeutet dies für Location? Was bedeutet das für Location? Was ist das für ein Attribut? Das wird dann evtl. sowas wie:
Java:
  public boolean isInsideMainWorld() {
      return getWorld().isMainWorld();
  }

==> Und das dann auch noch für p (Player?). Wann ist ein Player in so einer Location? isInGame? Oder was wäre das?
Aber nach dem Schema von oben: Du hast dann nur noch if (p.isInGame()) und die Klasse interessiert sich nicht für Location und World und was weiss ich - nur weil es daran interessiert ist, ob ein Spieler wirklich im Spiel ist oder nicht.

b) Das ist eine Mega Methode. Die würde ich auf jeden Fall aufteilen. Was für Grenzen sind da denn aktiv? Ist das sowas wie ein Level? Würde ich entsprechend festlegen und dann hat man nur noch eine Überprüfungen an einer Stelle a.la. LevelGrenze erreicht mit einem bestimmten erreichten Level sowie das man befindet sich in einem Level oder so ....

c) Du baust da so massive Zeichenketten auf mit § und / Zeichen und so. Da scheinst Du Daten in einem String kodiert zu speichern. Da solltest Du Daten in Rohform speichern und so Du so einen String wirklich brauchst z.B. zur Ausgabe oder von mir aus zur Serialisierung, dann baust Du den String in der Klasse, die die Werte speichert, zusammen bzw. parst Du. Das ist aber auch ein Spezialwissen, das in eine Klasse gekapselt werden muss. Und dann wird ansonsten nur darauf zugegriffen. (Selbst wenn das Speichern nicht als eigenständige Klasse gewünscht wird, würde ich das zusammen ziehen in Methoden um da wenigstens nicht ständig immer wieder so Code schreiben zu müssen sondern statt dessen aussagekräftige Methoden aufrufe.)
 

Cury

Aktives Mitglied
Ok ich werde jetzt einfachmal die Klasse in Methoden, wie z.B:
Java:
public void addXp(HashMap<String, Integer> map, ItemStack i)
aufteilen.
Danke für deine Hilfe!
 

JuKu

Top Contributor
Du solltest auch mal darüber nachdenken, mehr JUnit Tests zu schreiben.
Dann wird 1. der Code besser und 2. fällt einem dann schneller auf, wo der Fehler liegt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Fragen zu "Physics-Body-Editor"? Spiele- und Multimedia-Programmierung 0
J Fragen zur Gui-Aktualisierung Spiele- und Multimedia-Programmierung 2
A Langtons Ameise - Fragen zur Umsetzung Spiele- und Multimedia-Programmierung 1
D Ein paar Fragen... Spiele- und Multimedia-Programmierung 5
H LWJGL: Fragen zum Verständnis Spiele- und Multimedia-Programmierung 7
Helgon Fragen zur Umsetzung Spiele- und Multimedia-Programmierung 17
A Klickgame ala "Harveys neue Augen" oder "Edna bricht aus" in Java programmieren... Fragen zu Kleinig Spiele- und Multimedia-Programmierung 8
Samake03 [Game]"Plumbo - Lost in Depth" Preview und Fragen Spiele- und Multimedia-Programmierung 18
G Minecraft Minecraft Fragen Spiele- und Multimedia-Programmierung 1
A Fragen zu MMO Spiele- und Multimedia-Programmierung 6
N Ein paar fragen zu JOGL Spiele- und Multimedia-Programmierung 4
M Grundsätzliche Java3D Fragen Spiele- und Multimedia-Programmierung 2
D 3 JMF Fragen Spiele- und Multimedia-Programmierung 8
M Allgemeine Fragen zu JOGL2 / OpenGL3.2 Spiele- und Multimedia-Programmierung 36
M Fragen wegen Spieleprogrammierung Spiele- und Multimedia-Programmierung 17
M Fragen zu meinem Pong-Clone Spiele- und Multimedia-Programmierung 6
S glTexSubImage2D()-Fragen(Zerstörbares Terrain, OpenGL) Spiele- und Multimedia-Programmierung 3
K Game-Tutorial von Quaxli Fragen Spiele- und Multimedia-Programmierung 18
D Zwei Fragen (Exponential Fog und Schein-nach-außen-Effekt) Spiele- und Multimedia-Programmierung 6
H Einstieg erfolgreich ;), nun nur noch paar Fragen^^ Spiele- und Multimedia-Programmierung 13
V Fragen zum PositionPathInterpolator und RotationInterpolator Spiele- und Multimedia-Programmierung 2
N 4 Gewinnt fertig (Kritik, Fragen etc. erwünscht) Spiele- und Multimedia-Programmierung 29
J 3d Programmierung, Fragen: Spiele- und Multimedia-Programmierung 14
T Größeres Spiele Projekt - einige Fragen zur Umsetzung Spiele- und Multimedia-Programmierung 3

Ähnliche Java Themen

Neue Themen


Oben