cannot find symbol

StupidAttack

Bekanntes Mitglied
Hey liebe Leute

Ich bin gerade an einem Riesenobjekt zugange. Hier der Grundriss des riesenobjekts:
Java:
class Round
{

	if ( (fields[arrayIndexF1].kampfGesamtwert()) > ( fields[arrayIndexF2].kampfGesamtwert() ) )
	{
	System.out.println("Feld " + arrayIndexF1 + " gewinnt");
	}
}

class field
{


public int kampfGesamtwert()
{
Kampfstaerke =(angriffSK * SK)+(angriffGK * GK)+(angriffLT * LT)+(angriffST * ST)+(angriffMT * MT);
return Kampfstaerke;
}
}

class NIK2
{

public static void main //(darin befindet sich die main methode)


		//100 Felder Objekte erzeugen mit einem array names fields

		field[] fields = new field[100];

		for ( int i = 0; i < fields.length; i++ )
		{
		fields[i] = new field();
		}

}
Also der compiler spuckt ne fehlermeldung in der klasse Round aus; er findet die Objektreferenz in dem Array auf die field objekte nicht. die field objekte habe ich aber in der main klasse richtig erstellt (habe ich bereits überprüft). die methode in der field klasse funktioniert auch. die indizes des arrays habe ich in der round klasse initialisiert. wo liegt der fehler? darf man den methodenaufruf so nicht darstellen? die fight methode der klasse round funktioniert eigentlich einwandfrei wenn ich sie im main teste...die Klasse Round muss doch in andere Klassen und die methoden dort sehen können oder?

mensch ich bin am verzweifeln 🙁

Danke für jede Hilfe
 
Zuletzt bearbeitet:
es wäre schon die verbindung der klassen auch nachvollziehen zu können. verzichte mal auf ... und benutze stattdessen java tags. dann kann ich dir vllt helfen 😉
 
Du hast recht. ich euch mein ganzes projekt nicht antun, deshalb sind nur die relevanten infos drinne. dass der fehler woanders liegen könnte kann ich ausschliessen.
 
ich ehrlich gesagt nicht, weil ich garnicht weiß wo folgendes deklariert wird:
arrayIndexF1,arrayIndexF2,angriffSK,SK, angriffGK,GK,angriffLT,LT,angriffST,ST,angriffMT,MT

konstruktoren? instanzvariablen? wenn ja klasseninstanziierung von Round??

so kann man nichts sagen sondern nur raten
 
Also her der gesamte code ( isn arger rohbau)

die relevanten infos: r3f121m294h328
Klasse Round-->Zeile 3
Klasse field --> 121
Methode in field -->294
Main method -->328
Java:
import java.io.*; 

class Round
{
	//Instanzvariablen
	private String Eingabe;
	public int arrayIndexF1=1;	//Arrayindex des Angreifers
	public int arrayIndexF2=2;	//Arrayindex des Verteidigers
	

	//Kostruktoren


	//Methoden


	public void fight() throws IOException
	{

	BufferedReader stdin = new BufferedReader (new InputStreamReader(System.in));
	
	System.out.println("Mit welchem Feld wollen sie angreifen?(0-99)");
	Eingabe = stdin.readLine();
	arrayIndexF1 = Integer.parseInt(Eingabe);	

	System.out.println("Welches Feld wollen sie angreifen?(0-99)");
	Eingabe = stdin.readLine();
	arrayIndexF2 = Integer.parseInt(Eingabe);


	
	if ( ((fields[arrayIndexF1]).kampfGesamtwert()) > ( (fields[arrayIndexF2]).kampfGesamtwert() ) )
	{
	System.out.println("Feld " + arrayIndexF1 + " gewinnt");
	}
	

	

	}



	
}


class Player     //

{





}

class Instructions   //Koordiniert die Interaktion mit dem Benutzer
{



	private String Eingabe;
	int einlesenInt;




	public void menu()
	{
	System.out.println("Willkommen bei NIK-Nationen im Krieg-");
	System.out.println("Folgende Funktionen sind derzeit aufrufbar : ");
	System.out.println("\n");
	System.out.println("Einheitenanzahl von Feld 1 aendern: Eingabe: E1");
	System.out.println("Einheitenanzahl von Feld 2 aendern: Eingabe: E2");
	System.out.println("Parameter von Feld 1 aendern: Eingabe: PE1");
	System.out.println("Parameter von Feld 2 aendern: Eingabe: PE1");
	System.out.println("Kaempfstaerke Feld 1: Eingabe: KS1");
	System.out.println("Kaempfstaerke Feld 2: Eingabe: KS2");
	System.out.println("Beenden: Eingabe: exit");
	System.out.println("\n");
	}


	public String Einlesen() throws IOException
	{

	BufferedReader stdin = new BufferedReader (new InputStreamReader(System.in));
	

	System.out.println("Fuehren sie eine Aktion aus!");
	System.out.println("\n");
	System.out.println("\n");
	Eingabe = stdin.readLine();
	
	return Eingabe;
	
	}


	public int EinlesenZahlInteger() throws IOException
	{

	BufferedReader stdin = new BufferedReader (new InputStreamReader(System.in));
	

	System.out.println("Fuehren sie eine Aktion aus!");
	System.out.println("\n");
	System.out.println("\n");
	Eingabe = stdin.readLine();
	einlesenInt = Integer.parseInt(Eingabe);

	return einlesenInt;
	
	}



}

class field // Erzeugt ein Feld mit Einheiten ...
{
	//Instanzvariablen
	int SK = 0;			//Einheiten des felds
	int GK = 0;
	int LT= 0;
	int ST= 0;
	int MT= 0;



	//Einheiten Parameter

	int angriffSK=150, verteidigungSK=20, lebenSK=100;			//Parameter SK
	int angriffGK=300, verteidigungGK=300, lebenGK=300;				//Parameter GK
	int angriffLT=50, verteidigungLT=100, lebenLT=50;				//Parameter LT
	int angriffST=80, verteidigungST=50, lebenST=50;				//Parameter ST
	int angriffMT=120, verteidigungMT=30, lebenMT=50;				//Parameter MT

	// Kampfparameter
	
	public int Kampfstaerke;
	public int Verteidigungsstaerke;
	
	Double GesamtS;

	//zaehler

	int x = 1;



	//Konstruktoren



	
		


	// Methoden

	


	void EinheitenP() throws IOException  // Diese Methode ändert die Kampfparameter
	{

	BufferedReader stdin = new BufferedReader (new InputStreamReader(System.in));
	String Einlesen;


	
	System.out.println("Mit dieser Methode koennen sie die Parameter der Einheiten aendern");
	System.out.println("Erst wird nach dem Angriff gefragt, dann Verteidigung, dann Lebenspunkte");

		System.out.println("Parameter-SK:(Angriff/Verteidigung/Lebenspunkte)");

			Einlesen = stdin.readLine();
			angriffSK = Integer.parseInt(Einlesen);
			Einlesen = stdin.readLine();
			verteidigungSK = Integer.parseInt(Einlesen);
			Einlesen = stdin.readLine();
			lebenSK = Integer.parseInt(Einlesen);

		System.out.println("Parameter-GK:(Angriff/Verteidigung/Lebenspunkte)");
			Einlesen = stdin.readLine();
			angriffGK = Integer.parseInt(Einlesen);
			Einlesen = stdin.readLine();
			verteidigungGK = Integer.parseInt(Einlesen);
			Einlesen = stdin.readLine();
			lebenGK = Integer.parseInt(Einlesen);

		System.out.println("Parameter-LT:(Angriff/Verteidigung/Lebenspunkte)");
			Einlesen = stdin.readLine();
			angriffLT = Integer.parseInt(Einlesen);
			Einlesen = stdin.readLine();
			verteidigungLT = Integer.parseInt(Einlesen);
			Einlesen = stdin.readLine();
			lebenLT = Integer.parseInt(Einlesen);

		System.out.println("Parameter-ST:(Angriff/Verteidigung/Lebenspunkte)");
			Einlesen = stdin.readLine();
			angriffST = Integer.parseInt(Einlesen);
			Einlesen = stdin.readLine();
			verteidigungST = Integer.parseInt(Einlesen);
			Einlesen = stdin.readLine();
			lebenST = Integer.parseInt(Einlesen);

		System.out.println("Parameter-MT:(Angriff/Verteidigung/Lebenspunkte)");
			Einlesen = stdin.readLine();
			angriffMT = Integer.parseInt(Einlesen);
			Einlesen = stdin.readLine();
			verteidigungMT = Integer.parseInt(Einlesen);
			Einlesen = stdin.readLine();
			lebenMT = Integer.parseInt(Einlesen);
	
	
	
	
	
	}

	public void EinheitenA() throws IOException
	{

	BufferedReader stdin = new BufferedReader (new InputStreamReader(System.in));
	String Einlesen;


	System.out.println("Geben sie die EinheitenAnzahl fuer das Feld ein...");
	
		System.out.println("\n");
		System.out.println("SK:");
		Einlesen = stdin.readLine();
		SK = Integer.parseInt(Einlesen);

		System.out.println("\n");
		System.out.println("GK:");
		Einlesen = stdin.readLine();
		GK = Integer.parseInt(Einlesen);

		System.out.println("\n");
		System.out.println("LT:");
		Einlesen = stdin.readLine();
		LT = Integer.parseInt(Einlesen);

		System.out.println("\n");
		System.out.println("ST:");
		Einlesen = stdin.readLine();
		ST = Integer.parseInt(Einlesen);

		System.out.println("\n");
		System.out.println("MT:");
		Einlesen = stdin.readLine();
		MT = Integer.parseInt(Einlesen);


	
	
	
	}


	public void Sterne() 
	{
	
			
	while ( 20 >= x)
	{
	System.out.println("***************************************************************************");
	x++;
	System.out.println();
	}
	
	x=1;
	}		


	//Hauptmethode, Kampfstaerke

	void KampfS() 
	{

	Kampfstaerke = (angriffSK * SK)+(angriffGK * GK)+(angriffLT * LT)+(angriffST * ST)+(angriffMT * MT);
	
	System.out.println(Kampfstaerke);
	System.out.println("\n");
	
	}

	//gleich wie KampfS, ermöglicht kommunikation mit anderer klasse

	public int kampfGesamtwert()
	{
	Kampfstaerke = (angriffSK * SK)+(angriffGK * GK)+(angriffLT * LT)+(angriffST * ST)+(angriffMT * MT);
	return 	Kampfstaerke;
	}


	//Hauptmethode, Verteidigungsstärke

	void VerteidigungsS() 
	{

	Verteidigungsstaerke = (verteidigungSK * SK)+(verteidigungGK * GK)+(verteidigungLT * LT)+(verteidigungST * ST)+(verteidigungMT * MT);
	
	System.out.println(Verteidigungsstaerke);
	System.out.println("\n");
	
	}
	
	//gleich wie VerteidigungsS, ermöglicht kommunikation mit anderer klasse

	public int VerteidigungsGesamtwert()
	{
	return 	Verteidigungsstaerke;
	}
}






class NIK2 
{ 
	public static void main (String[] args) throws IOException
	{
		BufferedReader stdin = new BufferedReader (new InputStreamReader(System.in));

	
		String a = "";	

		//100 Felder Objekte erzeugen

		field[] fields = new field[100];

		for ( int i = 0; i < fields.length; i++ )
		{
		fields[i] = new field();
		}
		
		

		Round runde = new Round ();
		runde.fight();

		Instructions control = new Instructions();

		//field1.Sterne();

		control.menu();	
		/*
		while (  !a.equals("exit"))
		{
			
		a = control.Einlesen();

		
		if ( a.equals("PE1"))
		field1.EinheitenP();

		if ( a.equals("PE2"))
		field2.EinheitenP();

		if ( a.equals("E1"))
		field1.EinheitenA();


		if ( a.equals("E2"))
		field2.EinheitenA();

		if ( a.equals("KS1"))
		field1.KampfS();

		if ( a.equals("KS2"))
		field2.KampfS();
		

		}
		field1.Sterne();*/
	}
}
 
Zuletzt bearbeitet:
Haben die fields in Rounds etwas mit denen in NIK2 zu tun? Vermutlich nicht, denn in der main von NIK2 ist da ja eine lokale Variable.

Etwas mehr Code und die komplette Fehlermeldung wären sicher hilfreich...

//EDIT: da ist ja der Code, das ging ja sehr schnell
 
so. da habens wir schon 🙂. woher soll deine Klasse Round fields kennen?

deswegen lieber ohne ... weil mit kann ich nur raten, ob fields im konstruktor oä übergeben wird

edit: und das haben dir schonmal 3 leute (ich eingeschlossen) im anderen thread gesagt. halte dich an die konventionen.

Java:
int ichBinEineVariable; // klein
String ichBinEinObjektVariable; // genauso klein
final int ICH_BIN_EINE_KONSTANTE = 10; // komplett Uppercase mit _
class IchBinEineKlasse { // groß
 
Zuletzt bearbeitet:
so. da habens wir schon 🙂. woher soll deine Klasse Round fields kennen?

mhh, herrlich, du schaust da einmal druff und erkennst das schon.

Doch warum soll dass den nicht gehen; ich erstelle doch im main programm 100 field objekte in einem array, warum soll Round die nicht sehen können? (ich weiss gegenfragen stinken doch ich verweise auf meine signatur 🙂 )


edit:
können meine 100 field objekte (referenzvariablen; die auf die 100 objekte verweisen) nicht von anderen klassen gesehen werden? die NIK2 klasse sieht doch auch Round und Field Objekte...
grüsse
 
Zuletzt bearbeitet:
Trenne deine Klassen in Dateien, dann fällt es dir vllt leichter zu verstehen, warum das eine das andere nicht sehen kann. Vorausgesetzt du brauchst deine fields in der main nicht, machs gleich so (hast doch schon so schön die Konstruktoren kommentiert, dann kannste doch auch benutzen 😀):
Java:
	//Instanzvariablen
	private String eingabe;
	private int arrayIndexF1=1;  //Arrayindex des Angreifers
	private int arrayIndexF2=2;  //Arrayindex des Verteidigers
	private field[] fields;

	//Kostruktoren
	public Round() {
		//100 Felder Objekte erzeugen
		fields = new field[100];

		for ( int i = 0; i < fields.length; i++ )
			fields[i] = new field();
	}

ich hab Eingabe in eingabe geändert!!!! also passe deine Zuweißungen dementsprechend an

edit: was ich aber dir echt an Herz legen würde, wär ein Tutorial. Du bist grad soweit von einer oop entfernt, dass daraus niemals was anständiges werden wird. Lern erstmal modifier, konstruktoren, setter, getter, vererbung kennen. Ein etwas älteres aber echt imho ein super tut ist folgendes (damit habe ich auch angefangen):
Java Tutorial interaktiv - Programmieren lernen mit Java
Teil 1-3 kannst du ja überfliegen. Teil 4 wird dir sehr weiterhelfen das Ganze besser zu verstehen und danach anzuwenden
 
Zuletzt bearbeitet:
Danke

und entschuldige dass ich euch dazu verleite auf meine unkonventionen einzuprügeln und ihr euch aufregt, ich versuchs zu ändern (i see no changes, all i see is...).

Jedenfalls haben die 4 wochen intensiv-autoditaktikum wahrscheinlich noch nicht gereicht den sinn der oop zu verstehen. immerhin ne erkenntnis.

also dann versuch ich mal die dingers zu ändern...
 
edit: was ich aber dir echt an Herz legen würde, wär ein Tutorial. Du bist grad soweit von einer oop entfernt, dass daraus niemals was anständiges werden wird. Lern erstmal modifier, konstruktoren, setter, getter, vererbung kennen. Ein etwas älteres aber echt imho ein super tut ist folgendes (damit habe ich auch angefangen):
Java Tutorial interaktiv - Programmieren lernen mit Java
Teil 1-3 kannst du ja überfliegen. Teil 4 wird dir sehr weiterhelfen das Ganze besser zu verstehen und danach anzuwenden

HERRLICH.

dieses kapitel habe ich letzte woche gerade abgeschlossen :toll:

und übrigens habe ich mich beim gailer auch schon freundlich bedankt...

nichtsdestotrotz denke ich dass ein projekt die motivation aufrecht erhält und dass ich durch das viel lerne...
 
ich reg mich nicht auf 🙂. wenn dann würde ich es dir ja nicht ein zweites und ein drittes mal erklären. dir wird erstmal die komplette oop sinnlos vorkommen (so wars zumindest bei mir). du wirst dich öfters fragen: warum so umständlich, wenn ichs so leicht machen könnte. iwann verstehst du aber, dass sich da doch jemand was dabei gedacht hat 😉. deshalb investiere deine zeit lieber in ein tutorial und danach programmierst du sowas in 20minuten
 
dieses kapitel habe ich letzte woche gerade abgeschlossen :toll:

dann anscheinend nicht konzentriert genug. du wirst dir auch noch öfter sachen ein zweites und ein drittes mal durchlesen müssen. und wennst es nach dem 10ten mal erst verstehst 🙂

edit:
um die Frage vllt noch zu beantworten:
Doch warum soll dass den nicht gehen; ich erstelle doch im main programm 100 field objekte in einem array, warum soll Round die nicht sehen können? (ich weiss gegenfragen stinken doch ich verweise auf meine signatur 🙂 )
stell dir mal ein programm mit 200 Klassen vor. Dazu deine Logik und es wäre das reinste Chaos 🙂.
 
Zuletzt bearbeitet:
eigentlich verstehe ich das ganze einigermassen.

und ich habe mir auch schon ein einigermassen gutes design ausgedacht. seit wann lernst du java? studierst du info? seit wann kannst du proggen? wie lange hat es gebraucht bis du die oop intus hattest?

achja: jetzt funktionierts einwandfrei: Danke dir 🙂


edit zum 21:00: ich hatte durchaus schon das erlebnis die genialität hinter der oop zu verstehen. aber nichtsdestotrotz ist der hauptzweck der oop doch eigentlich nur platz zu sparen, da objekte und klassen immer wieder gebraucht werden. ist ja genau das gleich wie mit den variablen in der mathematik...
 
Zuletzt bearbeitet:
eigentlich verstehe ich das ganze einigermassen.

und ich habe mir auch schon ein einigermassen gutes design ausgedacht.

ja. wollte das jetzt nicht runterziehen. hast dir mit Sicherheit was dabei gedacht und da sind auch viele gute Ansätze/Umsetzungen dabei. versuch einfach noch etwas mehr Struktur reinzubringen. das sieht auf den ersten Blick immer sehr chaotisch aus. Erstelle für jede Klasse eine eigene Datei (ausser für nested natürlich 😉). Benutze die Modifier bedacht (zb Kapselung) und setzte getter/setter und Konstruktoren ein. Versuch vllt auch kleine tools bereits in Packages zu organisieren.
 
edit:
um die Frage vllt noch zu beantworten:

stell dir mal ein programm mit 200 Klassen vor. Dazu deine Logik und es wäre das reinste Chaos 🙂.


Aber jetzt existieren demnach die field objekte nur in der round klasse und nicht darüber hinaus. was wenn ich diese objekte über die main-klasse oder andere klassen ändern will? dann geht das doch nicht mehr...schrecklich...oder? schlisslich sollen die field Objekte im ganzen Programm geändert werden können, die anderen klassen sind teils nur dazu da die field objekte zu ändern...ich bin verwirrt, belassen wirs heute darauf...muss mich wieder sammeln:noe:
 

Zurück
Oben