# Code checken?



## ichebem (14. Januar 2008)

Ich hätte die bitte, dass sich einer mal den code unten anguckt... und mir sagt warum das nicht so klappt wie es soll.. wäre sehr nett


```
import java.io.*;

public class start  {

	public static void main (String[] args) 
	throws IOException {
	
	int a = 0;
	while (a == 0) {

		System.out.println ("Bitte aussuchen");
		System.out.println ("(1) Spiel starten");
		System.out.println ("(2) Highscore anschauen");
		System.out.println ("(3) Error beim laden des Objekts");
		System.out.println ("(4) Programm beenden");
	
		BufferedReader bin = new BufferedReader(new InputStreamReader(System.in));
		String menuwahl = bin.readLine();
		int menuewahl = Integer.parseInt(menuwahl);

		if (menuewahl == 1) {
		spiel.Levelw();

		} else if (menuewahl == 2) {

		} else if (menuewahl == 3) {

		} else if (menuewahl == 4) {
			System.out.println("(0) Zurueck");
			System.out.println("(1) Beenden");

			String ab = bin.readLine();
			a = Integer.parseInt(ab);

		} else {
			System.out.println ("Error bei der Eingabe, Bitte neu wählen.");
		}
	}
	}
}
```


```
import java.io.*;

public class spiel {

	public static void Levelw() 
	throws IOException {
		System.out.println("Bitte Wählen sie ein Level (1-3)");

		BufferedReader bin = new BufferedReader(new InputStreamReader(System.in));
		String level = bin.readLine();
		int levelw = Integer.parseInt(level);

		if (levelw == 1) {
			System.out.println("Level 1, tippen sie einfach die Zahlenreihe schnellstmöglich ab!");
			int multiplikator = 1000;
			code.coden(multiplikator);

		}else if (levelw == 2) {
			System.out.println("Level 2, tippen sie einfach die Zahlenreihe schnellstmöglich ab!");
			int multiplikator = 10000;
		}else if (levelw == 3) {
			System.out.println("Level 3, tippen sie einfach die Zahlenreihe schnellstmöglich ab!");
			int multiplikator = 100000;
		}else {
			System.out.println("Error bei der Levelwahl");
		}
	}

}
```


```
import java.io.*;

public class code {

	public static void coden(multiplikator) 
	throws IOException {

	System.out.println("Wirklich bereit?(Zum Start beliebige Taste)");
	String unwchtig = bin.readLine();

	int zahl= (int) (Math.random() * multiplikator);
	System.out.println( zahl );

	long zeit1 = System.currentTimeMillis();

	String eingabe = bin.readLine();
	int einzahl = Integer.parseInt(eingabe);
			
	long zeit2 = System.currentTimeMillis();

	long zwzeit = zeit2-zeit1;
	long zeit = zwzeit/1000 ;

	if (einzahl == zahl) {
		System.out.println("Richtig! Deine Zeit war: " + zeit + " Sekunde(n)! //oder// " +zwzeit + "  Milisekunden!");
		if (zeit <= 1) {
			System.out.println("Sehr gut");
		} else if (zeit <= 3) {
			System.out.println("Auch gut");
		} else if (zeit <= 7) {
			System.out.println("Naja, gerade erst aufgestanden?");
		} else if (zeit <= 11) {
			System.out.println("jaja, Brille vergessen stimmts?");
		} else {
			System.out.println("Sind sie in der ersten Klasse?");
		}
		System.out.println("Fuer neues Spiel druecke 'F8'.");	
	} else {
		System.out.println("Falsch! Für neuen Versuch druecke 'F8'. ");
	}
	
	}
}
```

die Fehlermeldungen die ich nicht verstehe:

cannot find symbol....cannot find symbol und nochmal cannot find symbol

String eingabe = bin.readline;
String unwchtig = bin.readline;
int zahl= (int) (math.random() * multiplikator);

und noch 

"in code cannot be applied to (int)" 
<-- schon klar was das heißt, aber wie soll ich dann den wert übergeben?


----------



## MeinerEiner_80 (14. Januar 2008)

Moin!
1. Was ist den "bin" in der Klasse code? Hast du nirgends definiert...
2. Was ist denn "multiplikator" für ein Typ? Solltest du vielleicht in die Methodensignatur der Methode coden schreiben..

*grüssle*
MeinerEiner


----------



## ichebem (14. Januar 2008)

MeinerEiner_80 hat gesagt.:


> Moin!
> 1. Was ist den "bin" in der Klasse code? Hast du nirgends definiert...
> 2. Was ist denn "multiplikator" für ein Typ? Solltest du vielleicht in die Methodensignatur der Methode coden schreiben..
> 
> ...



hu erstmal vielen dank für die antwort... ja das mit bin war ein dummer fehler... was meinst du mit methodensignatur

mfg


----------



## Matze (14. Januar 2008)

Methodensignatur ist das Gleiche, dass ich dir am Freitag beschreiben habe: Methodenname + Rückgabewert + Übergabeparameter

Methodenname <- Is wohl klar
Rückgabewert <- Welchen Typ der Wert entspricht, den die Methode zurück gibt
Übergabeparameter <- Welche Werte (und ob überhaupt) der MEthode mitgegeben werden


----------



## ichebem (14. Januar 2008)

ja was du mir gesagt hast, das weiß ioch ja noch ^^

aber ich dachte ich kann in dem ich zum,b beispiel

klasse.methode(variable);

so ne methode starten und die variable sowieso übergeben aber das geht i-wie net, daher wie muss ich es machen?

wäre nett wenn mir einer nen bsp-code zeigen könnte


----------



## Matze (14. Januar 2008)

```
public int addNumbers(int _iZahl1, int _iZahl2){
  int iErgebniss = 0;
  iErgebniss = _iZahl1 + _iZahl2;
  return(iErgebniss);
}
```

Diese Methode addiert dir die zwei übergebenen Zahlen und liefert ein Ergebniss in int zurück.


----------



## MeinerEiner_80 (14. Januar 2008)

Vielleicht solltest du dich einfach mal mehr mit den Grundlagen beschäftigen und mal ein paar Tutorials machen. Was du eben gefragt hast, kann man nämlich wunderbar an vielen Orten nachlesen..
Beispielsweise hier:
http://www.galileocomputing.de/open...02_007.htm#mj3ec6501a9a3e4f640f5552529b72df6b


*grüssle*
MeinerEiner


----------



## Matze (14. Januar 2008)

Aufrufen geht dann so:


```
int iAddedNumbers = 0;
iAddedNumbers = objekt.addNumbers(5, 3);

//oder wenn addNumbers statis ist:
iAddedNumbers = <Klasse>.addNumbers(5, 3);
```

Der Methode werden hier die Zahlen 5 und 3 übergeben. In der Methode werden diese addiert und als Rückgabewert der Variable iAddedNumbers zugewiesen.

@Meiner Einer_80
^^ an selbiges hab ich ihn Freitag auch verwiesen...


----------



## ichebem (14. Januar 2008)

ehm.... ich kapiers gerade net so ganz......

also

*public static int coden(multiplikator)* heißt die methode

die rufe ich auf durch

*code.coden(multiplikator);*

nachher kann ich dann Sachen wieder auslesen,,, das auslesen habe ich verstanden... frage ist wie geht denn das einlesen.... so wie ich atm mache nämlich net...


----------



## Matze (14. Januar 2008)

ichebem hat gesagt.:


> *public static int coden(multiplikator)* heißt die methode



Hier liegt das Problem. Du musst noch angeben, von welchem Datentyp der/die Übergabeparameter ist/sind


```
public static int coden(<Datentyp> multiplikator){
...
}
```


----------



## MiMi (14. Januar 2008)

Also erstma wenn du ne Methode aufrufst machst du das ja mit
Klassenname.methodenname(variable) 
Aber in der Methode selbst musst du schon sagen was fuer nen Typ die variable hat!

public static int coden( *int* multiplikator) 


Wieso machst du net erstma nen kleines Programm wo du nur das was eingegeben wurde wieder ausgibst? Ohne gleich so viele Rechenoperationen zu versuchen?


----------



## ichebem (14. Januar 2008)

hm danke Mimi... genau so weit war ich gerade auch durch Nachlesen

die kleineren funktionieren ja schon...die größeren wollen i-wie net...

hätte jetzt atm die frage wie ich ein return-element für int-variablen einbauen kann....

in dieser galileo hilfe habe ich das noch net gefunden.... also wie mache ich enn return element

return (variable);
return (int variable);
oder irgendwie anders?


----------



## Matze (14. Januar 2008)

ichebem hat gesagt.:


> return (variable);



Das ist die richtige Antwort. Man kann auch die Klammern weglassen, aber dann ist es nicht mehr so übersichtlich.

Beachte aber, dass die Variable den selben Typ haben  musst, wie der den du in der Signatur angegeben hast (der Typ vor dem Variablennamen).


----------



## ichebem (14. Januar 2008)

hm... ok habe mal wieder mist gebaut.... ich will ne "long" variable als return angeben.... oder von mri aus auch ne int, wenn mir einer sagt wie ich das umwandel:

int neu = parseInt (long); <--so?

oder halt wie mache ich enn return mit ner long variable, da kriege ich beim compilieren atm den error "möglicher präzisionsverlust"


----------



## Matze (14. Januar 2008)

Gib doch einfach in der Signatur an, dass du eine long zurückgeben willst .


----------



## ichebem (14. Januar 2008)

du meinst also

wenn ich z.b.

MAIN
ruf methode ZAHL
auf ........

und dann kann ich ohne was in Zahl zu machen in Main eingeben

iAddedNumbers = <Klasse>.addNumbers(5, 3);

meinst du es so.. oder was meinst du mti signatur.... also diese signatur habsch immer noch net ganz verstanden....


----------



## MiMi (14. Januar 2008)

Du solltest echt mit was kleinerem anfangen. Und zum Beispiel erstma nur die Eingabe auslesen und wieder ausgeben!


----------



## ichebem (14. Januar 2008)

ehm MIMI, das habsch ja gemacht.....mit nem Hund... der dann bellen konnte......

bzw... habsch auch schon was gemacht... wo man zum beispiel ne 1 eingeben muss damit der hund bellt... nur i-wie willd as jetzt alles zusammen net mehr klapppen

i need help...

am besten wäre es evtl, wenn mir einer einfach mal die richtige methoden signatur, bzw. return dingens sagt


----------



## Matze (14. Januar 2008)

Matze from HwI hat gesagt.:


> Methodensignatur ist das Gleiche, dass ich dir am Freitag beschreiben habe: Methodenname + Rückgabewert + Übergabeparameter
> 
> Methodenname <- Is wohl klar
> Rückgabewert <- Welchen Typ der Wert entspricht, den die Methode zurück gibt
> Übergabeparameter <- Welche Werte (und ob überhaupt) der MEthode mitgegeben werden



Ok, dann zum 3. Mal, was ne Signatur ist...


----------



## mk666 (14. Januar 2008)

Solange du noch solche Fragen stellst, solltest du erstmal noch ganz von vorne mit den Grundlagen anfangen. Datentypen, Methoden, Ausdrücke etc. Das ist essentielles Basiswissen bevor man überhaupt damit anfangen kann etwas zu programmieren. Wenn du das erstmal begriffen hast, dann erübrigen sich 90 % deiner Fragen...


----------



## ichebem (14. Januar 2008)

Matze from HwI hat gesagt.:


> Ok, dann zum 3. Mal, was ne Signatur ist...




ja.... das weiß ich auch... und habe das auch schon ein paar mal gelesen......das musst mir net öfters sagen. denn dann wirds nur noch nervig, vor allem für dich.... was mir nicht klar ist, ist wo und wie ich ne methodensignatur benutze


----------



## MiMi (14. Januar 2008)

Programmieren lernen, bedeutet auch sehr viel lesen und suchen. Somit 
Wikipedia zb:



> Die Signatur einer Methode besteht aus ihrem Namen und den Typen ihrer Parameter. Außerdem hat jede Methode einen bestimmten Rückgabetyp oder „void“, wenn sie nichts zurück gibt, und kann eine Reihe von Ausnahmen in einer sogenannten „throws“-Klausel definieren.
> 
> Beispiel einer konkreten Methode:
> 
> ...


----------



## zerix (14. Januar 2008)

Hallo,

sorry, dass ich mich in diese Diskussion einmische. Also das was du wissen willst, sind wirklich Grundlagenwissen, nicht nur von Java, sondern programmieren generell.
Meiner Meinung nach solltest du dir erstmal die ersten Kapitel durchlesen von dem Link, der dir gepostet wurde. Da steht alles drin was du wissen musst. Danach weißt du wie eine Klasse aufgebaut wird, Methoden geschrieben werden, mit und ohne Rückgabeparamter und noch vieles mehr.

Ein Forum hat meiner Meinung nach den Sinn, jemandem zu helfen, wenn er bei einem Problem nicht weiter kommt und nicht jemandem das Programmieren bei zu bringen. 
Meiner Meinung nach ist bei dir im Moment das zweite der Fall.

MFG

zEriX


----------



## ichebem (14. Januar 2008)

MiMi hat gesagt.:


> Programmieren lernen, bedeutet auch sehr viel lesen und suchen. Somit
> Wikipedia zb:




ja aber dieses return was da steht, das t ja net, und ich weiß net warum... weil i-ne variable falsch ist, aber ich habe keine ahnung was daran falsch ist


----------



## Matze (14. Januar 2008)

ichebem hat gesagt.:


> ja aber dieses return was da steht, das t ja net, und ich weiß net warum... weil i-ne variable falsch ist, aber ich habe keine ahnung was daran falsch ist



Und wie lautet die Fehlermeldung?


----------



## ichebem (14. Januar 2008)

zerix hat gesagt.:


> Hallo,
> 
> sorry, dass ich mich in diese Diskussion einmische. Also das was du wissen willst, sind wirklich Grundlagenwissen, nicht nur von Java, sondern programmieren generell.
> Meiner Meinung nach solltest du dir erstmal die ersten Kapitel durchlesen von dem Link, der dir gepostet wurde. Da steht alles drin was du wissen musst. Danach weißt du wie eine Klasse aufgebaut wird, Methoden geschrieben werden, mit und ohne Rückgabeparamter und noch vieles mehr.
> ...



hm... eigentlich ist es das gleiche.. Helfen und Helfen
nur auf verschiedenem niveau und offenbar bist du der meinung dass das niveau meiner fragen nicht angemessen für dieses forum ist.. oder?

naja ich kann dich verstehen... denn die fragen sind wirklich relativ leicht... für mich nur atm leider noch net....

das problem an der ganzen sacge ist das hier,,, ich muss bis freitag ein programm am laufen haben, was mindestens doppelt so komplex ist wie das hier.......
und ich habe noch keinen plan wie ich das anstellen soll

ich bin seit einer woche nur am lesen von irgendwelchen erklärungen.... z..b galileo... oder ähnliches... der umfang dieser seiten ist aber einfach zu gewaltig um ihn in 2wochen durchzukriegen, was ich aber i-wie machen muss... weils meine aufgabe ist....

sorry wegen der fragen.,.. aber ich denke du verstehst mich auch oder?



Matze from HwI hat gesagt.:


> Und wie lautet die Fehlermeldung?



_possible loss of precision........

found: long
required: int

return (zwzeit);_


----------



## MiMi (14. Januar 2008)

@ichebem
Denk bitte an die Netiquette, vorallem an die Gross und Kleinschreibung. (Ich muss mich auch dran halten, also du bitte auch)
Ich kann echt teilweise deine Fragen net mal verstehen. Du solltest schon deutlich zeigen wo dein Problem liegt, den code zeigen und auch die komplette Fehlermeldung posten.

Edit:
Du sagst der Methoden wohl das du nen int zurueckgibst, aber dein returnwert ist nen long. Also sagst du der Methode entweder das du nen long zurueckgibst, oder castest es nach int und gibst es dann zurueck!


----------



## Matze (14. Januar 2008)

ichebem hat gesagt.:


> sorry wegen der fragen.,.. aber ich denke du verstehst mich auch oder?



zerix hat Recht. An deiner Stelle würde ich der Stelle sage, der du dass programmieren sollst, dass du des net so schnell schafst.
Das Problem ist, dass du die Grundlagen des Programmieren an sich nicht kannst. Und die lernt man nicht in einer Woche so perfekt.



Poste mal deine Methode.


@MiMi
Hab ich auch schon gesagt...


----------



## zerix (14. Januar 2008)

Klar, es ist beides helfen bei Problemen. Aber es ist ein Unterschied, jemandem Programmieren bei zu bringen oder jemandem mal gerade bei einem Problem zu helfen, ist schon ein Unterschied.
Mein Post war auch nicht nur auf diesen Thread bezogen, ich hab dir ja schon mal in einem anderen Thread was dazu gesagt. Wenn man alles von dir zusammen nimmt, ist es nicht nur ein Problem lösen, sondern wirklich dir das Programmieren beibringen.

Bei gewissenhaften Durcharbeiten, schaffst du die Seiten für die Grundlagen in einem Tag.  Danach musst du solche Fragen auch nicht mehr stellen.

MFG

zEriX


----------



## MiMi (14. Januar 2008)

@Matze
Sry hab ich net gesehen


----------



## ichebem (14. Januar 2008)

MiMi hat gesagt.:


> @ichebem
> Denk bitte an die Netiquette, vorallem an die Gross und Kleinschreibung. (Ich muss mich auch dran halten, also du bitte auch)
> Ich kann echt teilweise deine Fragen net mal verstehen. Du solltest schon deutlich zeigen wo dein Problem liegt, den code zeigen und auch die komplette Fehlermeldung posten.
> 
> ...



Sorry wegen der Nettiquette!

Ja das Problem hast du richtig erkannt. 


```
import java.io.*;

public class start  {

	public static void main (String[] args) 						// Die Main-Klasse
	throws IOException {
	
	int a = 0;										// Beginn der While-Schleife, damit das Programm öfters ausgeführt wird
	while (a == 0) {
		
		System.out.println ("----------------");
		System.out.println ("-----<Menu>-----");						
		System.out.println ("(1) Spiel starten");
		System.out.println ("(2) Highscore anschauen");
		System.out.println ("(3) Error beim laden des Objekts");
		System.out.println ("(4) Programm beenden");
		System.out.println ("----------------");
	
		BufferedReader bin = new BufferedReader(new InputStreamReader(System.in));	// Die Menüauswahl
		String menuwahl = bin.readLine();
		int menuewahl = Integer.parseInt(menuwahl);

		if (menuewahl == 1) {								// Ausführung der zuvor gewählten Menüpunkte
		spiel.Levelw();									// teils in anderen Klassen / Methoden

		} else if (menuewahl == 2) {

		} else if (menuewahl == 3) {

		} else if (menuewahl == 4) {
			System.out.println ("----------------");				// beenden der while-schleife durch änderung der variablen " a "
			System.out.println("(0) Zurueck");
			System.out.println("(1) Beenden");
			System.out.println ("----------------");

			String ab = bin.readLine();
			a = Integer.parseInt(ab);

		} else {
			System.out.println ("----------------");
			System.out.println ("Error bei der Eingabe, Bitte neu wählen.");     	// Fehlermeldung bei unbekannter/falscher Eingabe
			System.out.println ("----------------");
		}
	
	}
	}
}
```


```
import java.io.*;

public class spiel {

	public static void Levelw() 
	throws IOException {
		System.out.println ("----------------");
		System.out.println("Bitte suchen sie ein Level aus (1-3)");    						// Levelauswahl
		System.out.println ("----------------");

		BufferedReader bin = new BufferedReader(new InputStreamReader(System.in));
		String level = bin.readLine();
		int levelw = Integer.parseInt(level);

		if (levelw == 1) {
			System.out.println ("----------------");
			System.out.println("Level 1, tippen sie einfach die Zahlenreihe schnellstmoeglich ab!");
										// Level 1, festlegung des Multiplikators
			int multiplikator = 1000;									// und starten der eigentlichen Spiel Methode
			code.coden(multiplikator);

			long check = code.coden (zwzeit);

			//System.out.println (zwzeit);

		}else if (levelw == 2) {
			System.out.println ("----------------");
			System.out.println("Level 2, tippen sie einfach die Zahlenreihe schnellstmoeglich ab!"); 
			int multiplikator = 10000;

		}else if (levelw == 3) {
			System.out.println ("----------------");
			System.out.println("Level 3, tippen sie einfach die Zahlenreihe schnellstmoeglich ab!");
			int multiplikator = 100000;

		}else {
			System.out.println ("----------------");
			System.out.println("Error bei der Levelwahl");
			System.out.println ("----------------");
		}
	}
}
```


```
import java.io.*;

public class code {

	public static int coden(int multiplikator) 
	throws IOException {
		
		BufferedReader bin = new BufferedReader(new InputStreamReader(System.in));	// Die Menüauswahl
		String menuwahl = bin.readLine();

		System.out.println("Wirklich bereit?(Zum Start beliebige Taste)");
		String unwchtig = bin.readLine();

		int zahl= (int) (Math.random() * multiplikator);
		System.out.println( zahl );

		long zeit1 = System.currentTimeMillis();

		String eingabe = bin.readLine();
		int einzahl = Integer.parseInt(eingabe);
			
		long zeit2 = System.currentTimeMillis();

		long zwzeit = zeit2-zeit1;
		long zeit = zwzeit/1000 ;

		if (einzahl == zahl) {
			System.out.println("Richtig! Deine Zeit war: " + zeit + " Sekunde(n)! //oder// " +zwzeit + "  Milisekunden!");
			if (zeit <= 1) {
				System.out.println("Sehr gut");
			} else if (zeit <= 3) {
				System.out.println("Auch gut");
			} else if (zeit <= 7) {
				System.out.println("Naja, gerade erst aufgestanden?");
			} else if (zeit <= 11) {
				System.out.println("jaja, Brille vergessen stimmts?");
			} else {
				System.out.println("Sind sie in der ersten Klasse?");
			}
			System.out.println("Super! Neues Spiel!");	
		} else {
			System.out.println("Falsch! Neuer Versuch!");
		}
		return (zwzeit);
	
	}
    
}
```

So sieht der Code atm aus.
_public static int coden(int multiplikator)_ ist die Methode. Sage ich dadurch, dass ich
*int* benutze, dass der Returnwert auch als int zurückkommt? Ich wüsste nämlich nicht wo ich das mache.
Nach der Umwandlung von long to int... oder wie du es nennst nach dem "casten" suche ich gerade in nem Buch, da habe ich aber bis jetzt nur String und Int gefunden.

mfg


----------



## MiMi (14. Januar 2008)

Richtig
public *double *methodenname()
return neDoubleVariable

public *int*methodenname()
return neIntVariable

etc

Du musst ja auch net nur in Buechern suchen, du kannst auch ne Suchmaschine anstrengen.


----------



## Matze (14. Januar 2008)

Genau das was ich und dann noch MiMi dir gesagt haben.
Mach mal 

```
public static int coden(int multiplikator) {
```

(Bitte das nächste mal NUR den relevanten Code)


----------



## ichebem (14. Januar 2008)

zerix hat gesagt.:


> Klar, es ist beides helfen bei Problemen. Aber es ist ein Unterschied, jemandem Programmieren bei zu bringen oder jemandem mal gerade bei einem Problem zu helfen, ist schon ein Unterschied.
> Mein Post war auch nicht nur auf diesen Thread bezogen, ich hab dir ja schon mal in einem anderen Thread was dazu gesagt. Wenn man alles von dir zusammen nimmt, ist es nicht nur ein Problem lösen, sondern wirklich dir das Programmieren beibringen.
> 
> Bei gewissenhaften Durcharbeiten, schaffst du die Seiten für die Grundlagen in einem Tag.  Danach musst du solche Fragen auch nicht mehr stellen.
> ...



wenn das so ist, dann mache ich wirklich was falsch..... und in dem mir zur Hand gegeben Buch steht im Kapitel Grundlagen so ziemlich gar nichts, das habe ich durchgearbeitet. Und in Galileo oder ähnlichen onlineHilfen steht meiner Meinung nach mehr als man schaffen kann.
Natürlich hast du Recht, dass er hier wohl auch in großen Teilen ums beibringen geht, aber das ist meiner Meinung nach eben auch helfen!

Bevor ich es vergesse:
Nen riesengroßes Dank mit ner Tafel schokolade an:
zErix
Matze
Meinereiner

und nen Blumenstraus an die Frauenpower
MiMi

Danke euch allen! Für eure Hilfe und konstruktive Kritik... 
und jetzt gehts weiter mit meinen Problemen mit Java....



Matze from HwI hat gesagt.:


> Genau das was ich und dann noch MiMi dir gesagt haben.
> Mach mal
> 
> ```
> ...



Aber genau das habe ich doch bereits gemacht! Und kriege beim Return dann immer den Fehler, dass ich ne long zurückgeben will, was nicht geht. Und wie ich ne long zu int umwandle, das suche ich gerade noch... bzw. könntet ihr mir evtl dabei helfen?


----------



## Matze (14. Januar 2008)

Ich wollte dir eigentlich zeigen, dass da der Fehler ist. Erstze das erste int doch mal durch ein long ...


----------



## zerix (14. Januar 2008)

Wie Matze schon sagt, ändere doch einfach den RÜckgabetyp auf long.

Google könnte dir aber auch helfen. Ist ganz einfach zu nutzen. Einfach mal "cast java" eingeben und schon findet man ne Menge beispiele wie man bei Java casten kann.

Oder auch mal bei "Java ist auch eine Insel" ins Stichwort-Verzeichnis gehen und auf Cast, casten klicken. Da wird dir auch gezeigt, wie es gemacht wird.

Das ist genau das was ich meine.


MFG

zEriX


----------



## MiMi (14. Januar 2008)

Wie gesagt entweder castest du das long zum int wenn du nen int zurueckgeben willst

```
public static int coden(int multiplikator) {
```
und casten von long nach int geht einfahc mit 

```
int zahl = (int) longVariable;
```

Oder du aenderst wie schon 3 ma gesagt den Rueckgabewert

public static *int *coden(int multiplikator) {
Das was hier dickgedruckt ist, ist der Rueckgabewert, den willst du nach long aendern, was musst du also machen?


----------



## ichebem (14. Januar 2008)

zerix hat gesagt.:


> Wie Matze schon sagt, ändere doch einfach den RÜckgabetyp auf long.
> 
> Google könnte dir aber auch helfen. Ist ganz einfach zu nutzen. Einfach mal "cast java" eingeben und schon findet man ne Menge beispiele wie man bei Java casten kann.
> 
> ...



Damit wäre dann klar, dass das Buch "java von Kopf bis Fuß" bescheuert ist.
Da heißt das nämlich nicht casten sondern Umwandeln, bzw parsen, und wenn man danach googlet findet man nichts! In Java ist auch eine Insel sind auch nur Fachbegriffe a la "Casten" wobei mir jetzt erst klar ist was der heißt!

Zum umwandeln also Casten...vielen Dank,

und das mit dem RückgabeTyp hatte ich falsch verstanden matze, bzw..... habe ich mich da ein bisschen verpeilt angestellt! Ich probiers nun mal eben kurz aus und gebe euch dann Rückmeldung!

p.s.: Ihr habt aber wirklich nichts zu tun außer mir zu helfen, und ich find das Klasse ^^

Juhu!!

Es klappt! War bei eurer Hilfe ja auch nicht anders zu erwarten. Ich wer nun erstmal versuchen die "Highscore-Funktion" einzubauen. Und das so weit es geht ohne eure Hilfe!

bis denne vielen Dank!

und ich brauche euch eh bald wieder


----------



## zerix (14. Januar 2008)

> und wenn man danach googlet findet man nichts!



Ich hab bei google eingegeben "cast java", also ich habe auch was gefunden.

MFG

zEriX


----------



## Matze (14. Januar 2008)

ichebem hat gesagt.:


> Zum umwandeln also Casten...vielen Dank,



Casten      -     Umwandeln
Fachwort  -      Umgangssprache


----------



## ichebem (14. Januar 2008)

zerix hat gesagt.:


> Ich hab bei google eingegeben "cast java", also ich habe auch was gefunden.
> 
> MFG
> 
> zEriX



in dem Fall war mit "damit" >umwandeln long int java< gemeint, was eigentlich aus dem Context hervorgehen sollte.

Es mangelte mir einfach an der Fachsprache, was matze ja dann nochmal klargestellt hat 

danke!


----------



## MiMi (14. Januar 2008)

@Matze
Nur das muss man erstma wissen ^^ Wenn in dem Buch was er da hat nur "umwandeln" benutzt wird. Ma sehen wie lange es dauert bis das naechste Problem kommt ^^

Edit:
Wenn ich nach "umwandeln long int java" suche, ist bei mir der 5. link 
Java Programming - Converting Long to Int and vice versa
Da er ja auch nach *long int java *sucht, was ja schon zum suchen gereicht haette ^^


----------



## zerix (14. Januar 2008)

Es wurde schon mal gesagt, dass du casten sollst. Es wurde das Wort casten genutzt. Damit hattest du das Fachwort. Gibst du bei Google ein findest du auch eine Antwort. Du hast alles gewusst, was du brauchtest um bei google eine Lösung zu finden.



> Es mangelte mir einfach an der Fachsprache, was matze ja dann nochmal klargestellt hat


Also ist das eine schlechte Ausrede.

MFG

zEriX


----------



## Matze (14. Januar 2008)

@MiMi
Hab ich kritisiert ?!


----------



## MiMi (14. Januar 2008)

@Matze
Nein, das hab ich doch net gesagt, ich habs nur mal gesagt und auch nen Smilie hinter gemacht


----------



## ichebem (14. Januar 2008)

zerix hat gesagt.:


> Es wurde schon mal gesagt, dass du casten sollst. Es wurde das Wort casten genutzt. Damit hattest du das Fachwort. Gibst du bei Google ein findest du auch eine Antwort. Du hast alles gewusst, was du brauchtest um bei google eine Lösung zu finden.
> 
> 
> Also ist das eine schlechte Ausrede.
> ...



es soll gar keine Ausrede sein, es ist einfach ein Fakt! Jeder weiß hier, dass ich nicht gut beim programmieren bin ,da muss ich mich nicht irgendwie rausreden

*NÄCHSTES PROBLEMCHEN IST DA*

Hat eigentlich alles super geklappt!, Aber


```
import java.io.*;

public class start  {

	public static void main (String[] args) 						// Die Main-Klasse
	throws IOException {
	
	int a = 0;
	int c = 0;
	//if (c == 0) {
		String nam = "Unknown";
	//	c = c + 1;
	//}										// Beginn der While-Schleife, damit das Programm öfters ausgeführt wird
	while (a == 0) {
		
		System.out.println ("----------------");
		System.out.println ("--- Spielername:" + nam + "---");
		System.out.println ("-----<Menu>-----");						
		System.out.println ("(1) Spiel starten");
		System.out.println ("(2) Highscore anschauen");
		System.out.println ("(3) Name umbenennen");
		System.out.println ("(4) Programm beenden");
		System.out.println ("----------------");
	
		BufferedReader bin = new BufferedReader(new InputStreamReader(System.in));	// Die Menüauswahl
		String menuwahl = bin.readLine();
		int menuewahl = Integer.parseInt(menuwahl);

		if (menuewahl == 1) {								// Ausführung der zuvor gewählten Menüpunkte
			spiel.Levelw();								// teils in anderen Klassen / Methoden

		} else if (menuewahl == 2) {

		} else if (menuewahl == 3) {
			name.neingabe(nam);
	
		} else if (menuewahl == 4) {
			System.out.println ("----------------");				// beenden der while-schleife durch änderung der variablen " a "
			System.out.println("(0) Zurueck");
			System.out.println("(1) Beenden");
			System.out.println ("----------------");

			String ab = bin.readLine();
			a = Integer.parseInt(ab);

		} else {
			System.out.println ("----------------");
			System.out.println ("Error bei der Eingabe, Bitte neu wählen.");     	// Fehlermeldung bei unbekannter/falscher Eingabe
			System.out.println ("----------------");
		}
	
	}
	}
}
```

ist der Code der Main-Klasse! Es geht um die Funktion " Namen umbennnen".

Das funktioniert auch alles super! Kompilieren lässt sich der Code auch, aber ich habe da ein "logik-problem"!

Ich weiß nicht warum, aber es ist so, dass das Programm offenbar nach der whileschleife, bzw nach dem Ende der whileschleife, nicht die while-schleife startet, sondern ganz oben! Dabei wird der gerade zuvor geänderte Name wieder auf "Unknown gesetzt.

Wie kann man das umgehen! Zuerst dachte ich mit ner einfachen If-abfrage (ist oben hinter den // zu sehen, aber wenn ich das mache, bekomme ich den Eroor, dass die Variable nam nicht deklariert wurde. Ich hoffe einer hat die zündende Idee!

mfg

okok, ich war zu vorschnell! ist gar kein logikfehler sondern irgendwas anderes

offenbar habe ich zwar den return in der methode angegeben, aber ich denke mal, dass ich i-wie in der main sagen muss, dass er es übernhemen muss, Frage wäre dann wie geht das?


unten dran nochmal die Namen-Funktion


```
import java.io.*;

public class name {

	public static String neingabe(String nam) 
	throws IOException {

	BufferedReader bin = new BufferedReader(new InputStreamReader(System.in));	
	int b = 0;

	while (b == 0) {

		System.out.println ("----------------");
		System.out.println("Derzeitiger Name: " + nam );
		System.out.println ("(0) Umbenennen");
		System.out.println("(1) Zurueck");
		System.out.println ("----------------");
		
		String namenn = bin.readLine();
		int ncheck = Integer.parseInt(namenn);

		if (ncheck == 0) {
			System.out.println ("----------------");
			System.out.println("Geben sie nun den neuen Namen ein!");
			System.out.println ("----------------");
			
			nam = bin.readLine();
						
		} else if (ncheck == 1){
			b = b + 1;

		} else {
			System.out.println ("----------------");
			System.out.println("Error bei der Auswahl");
			System.out.println ("----------------");
		}

	}
	return (nam);
	}
}
```


----------



## Matze (14. Januar 2008)

Ich versteh nicht was du meinst


----------



## MiMi (14. Januar 2008)

Was ist denn
            name.neingabe(nam);
name?
neingabe?
nam wird nirgends gesetzt? Wenn der jenige auf 3 drueckt, fragst du gar net nach dem neuen Namen? 

Achja, Klassennamen immer gross schreiben, variablen und Methodennamen klein


----------



## Matze (14. Januar 2008)

Ich blick zwar immer noch nicht ganz durch, aber du weißt schon, dass return erst nach der while-Schleife steht?!


----------



## MiMi (14. Januar 2008)

Also du aenderst den namen mit der Methode
name.neingabe(nam);

Du gibst mit der Methode neingabe auch nen neuen Namen zurueck, aber der wird nicht in den alten Namen gespeichert. Der geht verloren!


----------



## Matze (14. Januar 2008)

```
name.neingabe(nam);
```

MiMi hat recht. Du übergibst der Method immer wieder "unknown".


----------



## MiMi (14. Januar 2008)

Naja er muss halt nur den neuen Namen der zurueckgegeben wird, auch in der Klasse Start abfangen.


----------



## Matze (14. Januar 2008)

@MiMi
Ja stimmt, aber er soll ja auch lernen was sein Code da tut.


----------



## MiMi (14. Januar 2008)

Die namen der Variablen/ Methoden und Klassen find ich auch alle ziemlich undeutig. Ne Klasse Name, ne Variable namenn und nam


----------



## Matze (14. Januar 2008)

@MiMi
Ich wollts nicht sagen, nicht dass es noch mehr verwirrt


----------



## zerix (14. Januar 2008)

ichebem hat gesagt.:
			
		

> es soll gar keine Ausrede sein, es ist einfach ein Fakt! Jeder weiß hier, dass ich nicht gut beim programmieren bin ,da muss ich mich nicht irgendwie rausreden



Du hast gesagt, dass du den Fachbegriff ja nicht wusstest und deshalb nichts gefunden hast.  Dabei wurde dir der richtige Begriff genannt. Also ist es dann doch wohl eine Ausrede. Ich hab nichts von programmieren gesagt.

MFG

zEriX


----------



## ichebem (14. Januar 2008)

MiMi hat gesagt.:


> Naja er muss halt nur den neuen Namen der zurueckgegeben wird, auch in der Klasse Start abfangen.



jop das stimmt und die frage ist wie mache ich dass

sorry das ich egrade weg war, aber hier in der firma ist das i-net weggewesen



zerix hat gesagt.:


> Du hast gesagt, dass du den Fachbegriff ja nicht wusstest und deshalb nichts gefunden hast.  Dabei wurde dir der richtige Begriff genannt. Also ist es dann doch wohl eine Ausrede. Ich hab nichts von programmieren gesagt.
> 
> MFG
> 
> zEriX



dann hast du halt recht, es ging mir aber um keine ausrede

und da der begirff casten für mich neu war, habe ich nach dem mir bekannten gesucht.. und jetzt bitte ende mit dem thema und sagt mir lieber wie ich das mache, dass er den namen übernimmt!


----------



## MiMi (14. Januar 2008)

Dann ueberleg dir mal, wie du nen Wert den du aus ner Methode zurueckbekommst speicherst in nem anderen Wert. 
Du hast es schon mehrmals gemacht, bist es dir aber net bewusst!


```
int ncheck = Integer.parseInt(namenn);
```
Du bekommst aus Integer.parseInt nen integer zurueck, und speicherst in in einer int-variable mit dem namen ncheck. Das gleiche kannst du fuer deine NamenMethode machen.


----------



## Matze (14. Januar 2008)

ichebem hat gesagt.:


> jop das stimmt und die frage ist wie mache ich dass



BITTE BITTE, les dir mal die Sachen durch, die wir dir gepostet haben, weil jetzt wirds krass.


----------



## ichebem (14. Januar 2008)

Matze from HwI hat gesagt.:


> BITTE BITTE, les dir mal die Sachen durch, die wir dir gepostet haben, weil jetzt wirds krass.



jop....krass ist es doch schon immer......

und zu dem was mimi geschrieben hat....

aja.....

ich bin mir wirklich nicht ganz bewusst darüber was ich mache.....

bei deinem beispiel...... mache ich nen "cast" von string to int, wobei die beiden Variablen verschiedene Namen haben. Verstehe ich!

Jetzt geht es darum:

den "inhalt" von nam zu ändern.... das tue ich ja auch mit der einen Methode!
Aber mir ist nicht klar wie ich den veränderten Inhalt in der Mainmethode aufrufen kann!

Wenn ich dich jetzt richtig verstanden habe, dann ist der Wert von nam bereits in der Mainmethode, aber in irgendeinem für mich unsichtbaren Hintergrund und ich muss einfach ne 2te variable deklarieren um sie aufzurufen

aber wenn ich

String Hauptname = nam ;

kann das alle logik nach nicht mein Problem lösen....

ich stelle mich hier wahrscheinlich xtra- doof an, und es tut mir leid, aber ich weiß nicht wie


Für mich ist das was komplett anderes, was wahrscheinlich falsch ist


----------



## Matze (14. Januar 2008)

Sag halt einfach nam = <Usereingabe>


----------



## MiMi (14. Januar 2008)

Also mal ganz kurzes Beispiel:

```
class Test {
    public int getNumber() {
        return 3;
    }
}
... 
class Main {
 ....
    Test testklasse = new Test();
    public testeMich() {
        int whatsTheNumber = testklasse.getNumber();
    }
}
```
So, un nun bekommst du aus getNumer einen Wert, und den schreibst du in whatsTheNumber. Du machst das mit deinem Namen aber ohne das in die variable zu schreiben, und der Wert der zurueckgegeben wird, geht verloren!


----------



## ichebem (14. Januar 2008)

ok... ehm MiMi ich habe da atm den Error
*
neingabe (java.lang.string) in name cannot be applied to ()
        nam = testklasse.neingabe ();*

übrigens habe ich 

name testklasse = new name();

noch ganz am anfang der Main-Methode geschrieben, um testklasse zu definieren

was soll ich machen

neue variante... aber das versdtehe ich nicht mehr


```
import java.io.*;

public class start  {

	public static void main (String[] args) 						// Die Main-Klasse
	throws IOException {
	name testklasse = new name();
	int a = 0;
	int c = 0;
	//if (c == 0) {
		String nam = "Unknown";
	//	c = c + 1;
	//}										// Beginn der While-Schleife, damit das Programm öfters ausgeführt wird
	while (a == 0) {
		
		System.out.println ("----------------");
		System.out.println ("--- Spielername:" + nam + "---");
		System.out.println ("-----<Menu>-----");						
		System.out.println ("(1) Spiel starten");
		System.out.println ("(2) Highscore anschauen");
		System.out.println ("(3) Name umbenennen");
		System.out.println ("(4) Programm beenden");
		System.out.println ("----------------");
	
		BufferedReader bin = new BufferedReader(new InputStreamReader(System.in));	// Die Menüauswahl
		String menuwahl = bin.readLine();
		int menuewahl = Integer.parseInt(menuwahl);

		if (menuewahl == 1) {								// Ausführung der zuvor gewählten Menüpunkte
			spiel.Levelw();								// teils in anderen Klassen / Methoden
			
		} else if (menuewahl == 2) {

		} else if (menuewahl == 3) {
			name.neingabe(nam);
			nam = testklasse.neingabe(nam);
	
		} else if (menuewahl == 4) {
			System.out.println ("----------------");				// beenden der while-schleife durch änderung der variablen " a "
			System.out.println("(0) Zurueck");
			System.out.println("(1) Beenden");
			System.out.println ("----------------");

			String ab = bin.readLine();
			a = Integer.parseInt(ab);

		} else {
			System.out.println ("----------------");
			System.out.println ("Error bei der Eingabe, Bitte neu wählen.");     	// Fehlermeldung bei unbekannter/falscher Eingabe
			System.out.println ("----------------");
		}
	
	}
	}
}
```


```
import java.io.*;

public class name {

	public static String neingabe(String nam) 
	throws IOException {

	BufferedReader bin = new BufferedReader(new InputStreamReader(System.in));	
	int b = 0;

	while (b == 0) {

		System.out.println ("----------------");
		System.out.println("Derzeitiger Name: " + nam );
		System.out.println ("(0) Umbenennen");
		System.out.println("(1) Zurueck");
		System.out.println ("----------------");
		
		String namenn = bin.readLine();
		int ncheck = Integer.parseInt(namenn);

		if (ncheck == 0) {
			System.out.println ("----------------");
			System.out.println("Geben sie nun den neuen Namen ein!");
			System.out.println ("----------------");
			
			nam = bin.readLine();
			
						
		} else if (ncheck == 1){
			b = b + 1;

		} else {
			System.out.println ("----------------");
			System.out.println("Error bei der Auswahl");
			System.out.println ("----------------");
		}
	}
	return (nam);
	}
}
```

das sind die beiden relavanten codes für die option 3 "namen ändern"
einzigst unlogische ist:

wenn ich den namen ändere, dann erkennt er auch zunächst den neuen namen und startet die while-schleife der namensänderung neu......
gehe ich dann da auf "beenden", dann startet er nochmal die whileschleife, statt zurück zum "menü" zu gehen, und der Name ist dann auch wieder Unknown...

versteht ihr überhaupt mein problem?


----------



## MiMi (14. Januar 2008)

Du musst schon schauen was du machst! Und net nur das so uebernehmen wie ich das geschrieben hab, und bissel nach deinen Methodennamen umaendern!

Schau dri mal deine neingabe Methode an. Die verlangt das du den alten Namen mitgibst, weil du den ja dann nochmal in dem Namenaendern menu ausgeben willst!


----------



## ichebem (14. Januar 2008)

MiMi hat gesagt.:


> Du musst schon schauen was du machst! Und net nur das so uebernehmen wie ich das geschrieben hab, und bissel nach deinen Methodennamen umaendern!
> 
> Schau dri mal deine neingabe Methode an. Die verlangt das du den alten Namen mitgibst, weil du den ja dann nochmal in dem Namenaendern menu ausgeben willst!



was meinst du mit "verlangt"

die neingabe-methode soll den aktuellen namenausgeben. und die möglichkeit bieten diesen zu ändern, wurde dann der name geändert, gibt es einen neuen aktuellen Namen, der wieder angezeigt wird, und dann soll man die neingabe-Methode verlassen können.

Soweit funktioniert es auch, nach der Namensänderung steht bei aktueller name auch der neue, aber wenn man dann auf beenden geht, beendet er nicht, sondern lädt die neingabe-methode neu und zwar so, wie sie vor der namensänderung war, dann kann man wieder ändern oder beenden, beides möglich aber beenden funktioniert nur mit dem namen Unknown...warum auch immer


----------



## MiMi (14. Januar 2008)

HALLO?
DAS WAR NEN BEISPIEL
            name.neingabe(nam);
            nam = testklasse.neingabe(nam);

Das ist echt unsinn was du machst, du musst schon bissel ueberlegen. Was denkst du was der macht? Der ruft die Methode nun 2 mal auf! D.h. er kommt auch 2 mal da rein


----------



## ichebem (14. Januar 2008)

MiMi hat gesagt.:


> HALLO?
> DAS WAR NEN BEISPIEL
> name.neingabe(nam);
> nam = testklasse.neingabe(nam);
> ...




jo hallo!

sorry wegen der dummen frage, habe da atm net ganz aufgepasst, soll heißen ich dachte dass nam = testklasse.neingabe(nam); nur ausließt, aber nicht die methode startet, jetzt weiß ich dass es auslesen+methodenstart ist!

es funktioniert alles so wie es soll!! vielen dank MiMi

und sorry...ich will euch weder nerven noch an den rand der verzweiflung treiben!


----------

