# Fehler in Java-Code finden



## chris80 (12. Dez 2011)

Hallo Zusammen,

ich habe eine Aufgabe bekommen die darin besteht Fehler in einem Java-Programm zu finden. Leider hab ich den Code nur als Bild bekommen und kann ihn hier nicht sauber posten. Es sollen angeblich sehr viele und Fehler aller Art vorhanden sein. Allerdings kann ich keine Fehler finden und schon gar nicht Triviale.
Könnt ihr nicht mal drüber schauen und mir vielleicht ein paar Tipps geben wo die Fehler versteckt sein könnten. müsst ihr mir ja nicht vorsagen, aber vielleicht darauf hinweisen welche Zeilen ich mir mal genauer anschauen sollte.. oder findet ihr auch nichts?
Wäre sehr wichtig für mich.
Vielen Dank und Beste Grüße


----------



## Kiri (12. Dez 2011)

Also, ich kann ihn so nicht lesen. Wenn du dir die Mühe machst ihn abzutippen und ihn vernünftig formatiert hier postest, wäre ich bereit drüber zu schauen.


----------



## theCoon (12. Dez 2011)

hi,

ich kann irgendwie das bild nicht richtig lesen, ist die auflösung zu schlecht oder muss ich das ding woanders runterladen?

zur Fehlersuche, ich würd sagen das du den text einfach mal schnell abtippst und dann mit einem debugger drüber gehst. der sollte die schlimmen fehler schon finden. 

gruß


----------



## chris80 (12. Dez 2011)

Sorry, wusste nicht das das hier so mickrig rüberkommt.
Den Code bzw. das Bild könnt ihr euch jetzt unter:
http://www.cm-informatics.de/Assessment.png
runterladen, falls es nicht leserlich ist...lokal speichen (einfach rechtsklick -> Speichern unter...)
abtippen dauert viel zu lange, abgesehen von den Fehlern die ich dann nich selber einbaue...


----------



## c2delegate (12. Dez 2011)

Hihi, in den ersten zeilen sind schon lustige fehler eingebaut. Mal so nebenbei wofür musst du das machen? Ich finde es übrigens schon dreist von dir, den code nicht mal in eine ide abtippen zu wollen, dadurch würdest du einige fehler finden, anscheinend hat du keine lust, ist besser wenn sich hier ein dummer findet der das für dich erledigt. Denke so hat die aufgabe für dich keinen sinn und null lehrinhalt


----------



## Final_Striker (12. Dez 2011)

Du willst das man für dich die Fehler findet, bist aber zu faul dafür die paar Zeilen abzutippen?
Viel Glück!


----------



## chris80 (12. Dez 2011)

Der Sinn der Aufgabe ist es das man es eben nicht in eine IDE eingibt, den Compiler fragen kann ja jeder. wo ist dann der Sinn der Aufgabe? Oder gibst du auch alles in den Google-Übersetzer ein wenn du einen Text übersetzen musst? Hier geht es um das scharfsinnige erkennen von Fehlern, eben um die Fähigkeit gewisse Fehler auf Anhieb mit dem bloßen Auge zu erkennen. Deswegen frage ich euch höflich ob ihr mir ein paar Tipps geben oder ihr zumindest sagen könnt, ob es triviale Fehler oder komplexe Sachverhalte sind die da nicht stimmen.


----------



## ARadauer (12. Dez 2011)

chris80 hat gesagt.:


> Der Sinn der Aufgabe ist es das man es eben nicht in eine IDE eingibt, den Compiler fragen kann ja jeder. wo ist dann der Sinn der Aufgabe?


Der Sinn ist aber auch nicht, dass man ein Forum nach der Lösung fragt ;-)


Ich muss ehrlich sagen, ich find auf anhieb keinen.... Ist auch schwer wenn man nicht weiß wonach man suchen soll. Da sind ein paar Dinge mit diesen private statice klassen und Generics .. aber auf den ersten Blick wüsste ich nicht was nciht passen sollte...


----------



## chris80 (12. Dez 2011)

Vielen Dank für deine Einschätzung, das hilft mir schonmal. Aber es kann nicht sein das ich direkt mit Füßen getreten werde wenn ich *höflich* eine Frage stelle und man mir dan unterstellt ich sei zu faul es abzutippen, denn darum geht es ja gar nicht. Ein Forum ist ja eigentlich dafür da um ein paar Tipps zu bekommen. ich erwarte ja keine Lösung nur Tipps bzw. Hinweise


----------



## langhaar! (12. Dez 2011)

Auch jemand der höflich fragt, kann stinkfaul sein.

Was für Tipps erwartest du? 
Schau dir das Programm Zeile für Zeile an und kontrolliere, ob die Syntax in Ordnung ist, ob die Variablen deklariert und definiert sind, dass die Parameter und Generics stimmen und dass die Modifier passen.

Wenn du keinen Fehler findest, wirst du es wohl abtippen müssen.


----------



## ARadauer (12. Dez 2011)

mhn zeile 24... was beduetet final und was wird in Zeile 26 gemacht?


----------



## chris80 (12. Dez 2011)

In Zeile 9 wird ein Konstruktor einer abstracten Klasse definiert. Macht das Sinn? Ich kann eh keine Objekte der Klasse erzeugen. Also kann der Kontruktur auch keine initialisieren. Seh ich das richtig?


----------



## musiKk (12. Dez 2011)

Nein, das kann durchaus sinnvoll sein.


----------



## Kiri (12. Dez 2011)

chris80 hat gesagt.:


> aber vielleicht darauf hinweisen welche Zeilen ich mir mal genauer anschauen sollte



24 - 28 --> Problem final
50 + 55 - 57 --> Problem Initialisierung
48 + 68 + 71 --> Problem static


----------



## Noctarius (13. Dez 2011)

Also wenigstens abschreiben könnte man den Source ja, wenn man schon nicht selber suchen mag *Kopf schüttel*


----------



## chris80 (13. Dez 2011)

Hallo zusammen,
habe jetzt den Quellcode abgeschrieben und es sind in der Tat nur 4 Fehler und 6 Warnungen darin zu finden. Also das es von Fehlern nur so wimmelt kann man bei weitem nicht behaupten.
Kiri hat diese Probleme schon richtig erkannt. Dazu kommt noch eine Warung bei der Override-Funktion in Zeile 20. Ich muss sagen das ich weitaus mehr Fehler erwartet hätte

Hier der Code (für die Leute die mir unterstellen wollen, das ich lüge und en Quelltext doch nicht abgeschreiben habe)... also von wegen zu faul. Thema ist erledigt

```
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Vector;

public class CheckupOne {

	private abstract static class AbstractStorage<ItemType>
	{
		public AbstractStorage(ItemType... aPrefillItems)
		{
			super();
			prefill(aPrefillItems);
		}
		protected abstract void prefill(ItemType... aPrefillItems);
	}
	
	private static class Storage<ItemType> extends AbstractStorage<ItemType>
	{
		private final List<ItemType> mItems = new ArrayList<ItemType>();
		public Storage(ItemType... aPrefillItems)
		{
			super(aPrefillItems);
		}
		@Override protected void prefill(ItemType[] aPrefillItems)
		{
			mItems.addAll(Arrays.asList(aPrefillItems));
		};
		@Override public String toString()
		{
			final String result = new String();
			for (ItemType item : mItems)
			{
				result += item != null ? item.toString() : "<null>";
				result += ", ";
			}
			return result.substring(0, result.lastIndexOf(','));
		}
	}
	private static class UniqueStorage<ItemType> extends AbstractStorage<ItemType>
	{
		private final Vector<ItemType> mItems = new Vector<ItemType>();
		public UniqueStorage(ItemType... aPrefillItems)
		{
			super(aPrefillItems);
		}
		protected void prefill(ItemType[] aPrefillItems)
		{
			add(aPrefillItems);
		}
		public void add(ItemType... aPrefillItems)
		{
			for (ItemType itemType : aPrefillItems)
			{
				if (!mItems.contains(itemType))
				{
					mItems.add(itemType);
				}
			}
		}
	}
	private class NamedItem<PayloadType extends Comparable>
	{
		private final String mName;
		private final PayloadType mPayload;
		public NamedItem(final String mName, PayloadType mPayloadType)
		{
			this.mName = mName;
			this.mPayload = mPayloadType;
		}
		public NamedItem(String mName)
		{
			this.mName = mName;
		}
		
		@Override public boolean equals(Object obj)
		{
			return mName.equals(((NamedItem) obj).mName) && mPayload.equals(((NamedItem)obj).mPayload);
		}
		
		@Override public String toString()
		{
			return mName;
		}
	}
	
	
	public static void main(String[] args) 
	{
		UniqueStorage<?> names = new UniqueStorage<NamedItem<String>>(new NamedItem<String>("a", "A"));
		UniqueStorage<?> places = new UniqueStorage<NamedItem<String>>(new NamedItem<String>("b", "B"));
		
	final Storage<UniqueStorage<NamedItem<String>>> storage = new Storage<UniqueStorage<NamedItem<String>>>(names, places);
	System.out.println(storage);

	}

}
```


----------



## Kiri (13. Dez 2011)

Das mit dem Abschreiben und hier in formatiert in Java-Tags posten, geht ja auch darum, es uns einfacher zu machen - Dir zu helfen ;-).


----------



## theCoon (13. Dez 2011)

chris80 hat gesagt.:


> In Zeile 9 wird ein Konstruktor einer abstracten Klasse definiert. Macht das Sinn? Ich kann eh keine Objekte der Klasse erzeugen. Also kann der Kontruktur auch keine initialisieren. Seh ich das richtig?



naja am einem Fehler bist du schon nah dran, schau dir an was im konstruktor passiert.


----------

