Java array aus metode in andere methode einbeziehen

andron88

Cadet 1st Year
Registriert
Jan. 2010
Beiträge
8
Habe ein array in einer methode und sobald ich die methode in eine andere methode einbeziehe, nützt der array nichts mehr. wie kann ich das array aus der Methode in eine andere methode einbeziehen?


Code:
public void kornKontrolle()
	{
		int zaehler=0, genommen=0;
		int[] feld = new int[4];
		int i=0;
		
		if (paul.kornDa()) 
		{
			paul.nimm();
			do 
			{
				paul.gib();
				zaehler++;
			} while (!paul.maulLeer());
			genommen++;
			feld[i] = zaehler;
			zaehler = 0;
			if (i < 3) 
			{
				i++;
			}
		}
	}

Code:
public boolean zaehleUndTesteSerie()
	{		

		...
		do
		{
			paul.vor();
			
			kornKontrolle();
		}while(paul.vornFrei());
                ...
 
Ich bin mir zwar nicht sicher, von welchem Array du sprichst, aber generell: Einfach als Parameter übergeben, wenn er in einer anderen Methode verwendet werden soll.
 
um das array feld. es sollen die gespeicherten werte mit dem array in die untere methode übergeben werden sodas ich diesen array da unten weiter benutzen kann.
 
du könntest das feld als rückgabewert der methode kornkontrolle() mitgeben oder du deklarierst es als instanzvariable, so das beide methoden direkt darauf zugreifen können.
 
dann mach mal aus dem void ganz fix ein int[], void gibt nämlich nix zurück, außerdem brauchste dann noch eine return-anweisung, die dementsprechend dein array ausgibt.
 
Du musst nur den Rückgabetyp der Methode kornKontrolle() von void in int[] ändern.
Code:
public int[] kornKontrolle()
{
     int[] feld = new int[4];
     ....
     return feld;
}

Dann kannst du die Rückgabe der kornKontrolle Methode weiterverwenden:

Code:
public boolean zaehleUndTesteSerie()
{
      ...
      int[] feld = kornKontrolle();
      ...
}
 
wenn du ein array von einer anderen methode in der aktuellen methode (die was du uns da zeigst) verwenden willst schreibst du einfach oben:
Code:
public void kontrolle(int[] feld)

und dann wenn du die methode aufrufst z.B in der main Methode also wo du sie ausführst schreibst du einfach:

Code:
Klassenname k1 = new Klassenname(); //Objekt
int[] name = new int[4];//Array
k1.kornkontrolle(name);//Aufrufen der Methode Kornkontrolle

oder ich hab die frage falsch verstanden^^
 
großes dankeschön und kann ich das genommen++ auch in die andere methode (public boolean zaehleUndTesteSerie()) weitergeben?
 
Ich rätsle, wozu feld überhaupt gut ist. Das ist doch nur ein int-Array mit 4 Feldern, von denen (mindestens) drei leer bleiben und das erste (sofern ein "Korn da" ist) mit dem Wert zaehler belegt wird (welcher noch dazu hinterher wieder auf 0 gesetzt wird).
 
Zuletzt bearbeitet:
nein das ist ein labyrinth und in den ecken liegen bestimmte anzahl von körnern, die zahl wird dann in feld gespeichert. also der zähler übergibt die anzahl in das erste feld, wird auf 0 gesetzt, dann sucht der hamster weiter. sobald er die nächsten zahl der körner hat speichert er über zähler in das zweite feld und setzt zaehler wieder auf 0 und so weiter
 
Zuletzt bearbeitet:
So soll es vielleicht sein, aber wenn ich den geposteten Code nicht völlig fehlinterpretiere, passiert das nicht.
 
doch doch tut er schon, will das jetzt nur vereinfachen. muss jetzt nur genommen in die andere methode übergeben.
 
hm ich interpretiere den code so:

- paul (der vogel?) läuft solange nach vorne wie der weg frei ist und überprüft nach jedem schritt nach körnern
- wenn paul körner findet nimmt er diese auf und spuckt sie solange wieder aus, bis sein maul leer ist :)
- die anzahl der ausgespuckten körner wird in feld[0] und nur da gespeichert, da das hochzählen von i hinterher keine auswirkung hat

ich glaube da ist noch wo der murks drin. wieviele positionen musst du denn auswerten nach körnern, 4? du könntest auch mal den ganzen code posten oder die aufgabenstellung :)
 
Zuletzt bearbeitet:
ja genau der hamster sammelt diese 4zahlen(koerner) und speichert das im feld[0] und mit i wird das feld um 1 erhöht, sodass er die nächste zahl im feld[1] speichert und so weiter. am ende sortiert er die 4 zahlen und wenn es vier verschiedenene zahlen sind, dann sortiert er diese, aber das ist bei mir weiter unten im quelltext.

weiss einer wie ich genommen in die andere methode einbeziehe?
 
Zuletzt bearbeitet:
also überprüft er von mir aus 20 felder, aber wenn er 4x etwas gefunden hat, ist er fertig? und gefunden heisst 1-x körner?
dann würde ich das feld in der funktion zaehleUndTesteSerie() erstellen. die funktion kontrolle gibt dann entweder 0 zurück, wenn keine körner gefunden wurden oder eben die entsprechende anzahl an gefundenen körner.
in zaehleUndTesteSerie() wird dann der rückgabewert (wenn größer 0) in das feld eingetragen und dort i hochgezählt. genommen brauchst du dann auch nicht mehr.
aber vielleicht versteh ich auch alles ganz falsch :) die sache ist auf jedenfall die, dass es so wie du es momentan hast nicht funktioniert. auf deine eigentlich frage wurde ja schon geantwortet. eine methode kann übrigens nur einen rückgabewert haben :)
 
das stimmt schon dachte man kann das irgendwie kürzer schreiben. will mit dem genommen folgendes erreichen.

Code:
public boolean zaehleUndTesteSerie()
	{		

		int[] feld = kornKontrolle();
		...
		do
		{
			paul.vor();
			
			kornKontrolle();
		}while(paul.vornFrei());
		
		paul.linksUm();
		
		do 
		{
		 rechtsUm();

			if (paul.vornFrei()) 
			{
				paul.vor();
				kornKontrolle();
			} 
			else 
			{
				paul.linksUm();
				
				kornKontrolle();
				
			}

		} while (genommen < 4);

da sind halt immer körner im labyrinth und der soll das ganze durchlaufen bis er 4 mal genommen hat.
 
Code:
public boolean zaehleUndTesteSerie() {
	int[] koerner = new int[4]; 
        int genommen = 0;
        int cntKorn = 0;

	while (genommen < 4) {        	      	
		cntKorn = kornKontrolle();	
                if (cntKorn > 0) {			
			koerner[genommen] = cntKorn;
			genommen++;
		}
		while (!vornFrei) {
			linksUm();
				
                }
		vor(); 
	}

	...
}

public int kornKontrolle() {
	int zaehler=0
		
	if (paul.kornDa()) 
	{
		paul.nimm();
		do 
		{
			paul.gib();
			zaehler++;
		} while (!paul.maulLeer());
			
	}
	return zaehler;
}

nur mal als idee :) die korrekte wegfindung durch das "labyrinth" musst du dann noch selber machen. ich übernehme auch keine garantie für fehlerfreie java syntax^^
 
Zurück
Oben