2. Class macht ärger und einige Variablen

Status
Nicht offen für weitere Antworten.

assault

Aktives Mitglied
Also folgendes es geht um die hier verlinkte Übung 9.1
http://www.java-wi.de/uebungen/U-09.pdf

Ich hab die jetzt hier verlinkt weil ich mir noch nicht mal wirklich sicher bin ob ich sie überhaupt
richtig verstanden habe.

Sollte ichs aber richtig verstanden haben, dann geht es darum das eich Glücksspiel proggen soll und das Hauptaugenmerk liegt wohl daran das ich in der Auf gabe eine Methoden aus der Main() "auslager" und in eine 2. Class packe

Code:
                public int geld;
	public int zgz1;
	public int zgz2;
	
public class Spieler 
{

	public int zahlGewinnzuege ( int zgz)
	{
		zgz = zgz +1;
		return zgz;
	}

	public boolean kannspielen (boolean a, double g) 
	{
		if (g >=0){a = true;}
		else {a =  false;}
		
		return a;
		
	}
}		

public class Spiel{
	public void main(String[]args)
	{
		Double g1 = IO.promptAndReadDouble("Bitte Kapital des ersten Spielers eingeben: ");
		Double g2 = IO.promptAndReadDouble("Bitte Kapital des zweiten Spielers eingeben: ");

		String a = IO.promptAndReadString("Bitte Namen des ersten Spielers eingeben: ");
		String b = IO.promptAndReadString("Bitte Namen des zweiten Spielers eingeben: ");

		Double p = IO.promptAndReadDouble("Bitte Wahrscheinlich keit eingeben (Zahl zwischen 0 und 1): ");

		while(g1 > 0 & g2 > 0)
		{
			double z = Math.random();
			if (z <= p){ g1 = g1 + 1; g2 = g2 - 1; zgz1 = Spieler.zahlGewinnzuege(zgz1); }
			else { g1 = g1 - 1; g2 = g2 + 1; zgz2 = Spieler.zahlGewinnzuege(zgz2); }
		}


		if (Spieler.kannspielen(g1) == true ){zgz2 = zgz2/zgz1*100; System.out.println 
		("Spieler" + a + "ist Pleite! Die gewinn " +
				"Quote des 2 Spilers liegt bei: " + zgz2 );}
		else {zgz1 = zgz1/zgz2*100; System.out.println 
		("Spieler" + b + "ist Pleite! Die gewinn " +
				"Quote des 1 Spilers liegt bei: " + zgz1 );}
	}
}


ich kenne zwar die Fehler mledungen weiß aber nicht wirklich was ich mit ihnen anfangen soll und ob ich überhaupt richtig "ausgelagert" habe.

einmal verlangt er von mir das ich den Part lösche

Code:
public int geld;
	public int zgz1;
	public int zgz2;

dann mekert ermir noch was bei dem Part von wegen "method not applicable for the argumnets"

Code:
if (Spieler.kannspielen(g1) == true )

und bei jedem zgz1 und zgz2
von wegen cannot be resolved
 
S

SlaterB

Gast
warum verlinkst du die Aufgabe, wenn dir elementare Grundlagen fehlen

> public int geld;
> public int zgz1;
> public int zgz2;

Variablendeklarationen dürften nicht wild in der Gegend stehen,
die gehören in eine Klasse

> Spieler.kannspielen(g1)

schau dir doch mal die Deklaration dieser Operation an,
da sind zwei Parameter gefordert, 2 != 1

vom Typ boolean statt Double mal ganz abgesehen..

der boolean-Parameter in der Operation kann sicherlich weg,
um true oder fals zurückzugeben brauchst du kein a von außen

> zgz1 und zgz2

die sind ja gar nicht richtig deklariert, und selbst wenn, dann doch wahrscheinlich in der Klasse Spieler,
wie willst du in Spiel in der main einfach so drauf zugreifen?
 

assault

Aktives Mitglied
SlaterB hat gesagt.:
warum verlinkst du die Aufgabe, wenn dir elementare Grundlagen fehlen

> public int geld;
> public int zgz1;
> public int zgz2;

Variablendeklarationen dürften nicht wild in der Gegend stehen,
die gehören in eine Klasse

> Spieler.kannspielen(g1)

schau dir doch mal die Deklaration dieser Operation an,
da sind zwei Parameter gefordert, 2 != 1

vom Typ boolean statt Double mal ganz abgesehen..

der boolean-Parameter in der Operation kann sicherlich weg,
um true oder fals zurückzugeben brauchst du kein a von außen

> zgz1 und zgz2

die sind ja gar nicht richtig deklariert, und selbst wenn, dann doch wahrscheinlich in der Klasse Spieler,
wie willst du in Spiel in der main einfach so drauf zugreifen?


Hi wegen den Variablen, dass stand ja so in der Aufgabe ich soll in der "Class Spieler" die Variablen deklarieren
(oder ich habs falsch verstanden, da bin ich mir nicht ganz sicher...) und in der main drauf zugreifen. Als es von der Main aus nicht ging dachte ich, ich mache es so wie ich es aus VB her kenne und deklariere sie einfach global ausserhalb jeglicher class .... wusste jetzt nicht das es bei java nicht geht bzw. das es da keine möglichkeit gibt die ausserhalb der class zu deklarieren...

hab jetzt versucht den code nochmal anzupassen
aber jetzt mekert er das ich die "class Spiel" "must be defined in its own file"


Code:
public class Spieler 
{
	
	public int zahlGewinnzuege ( int zgz)
	{
		zgz = zgz +1;
		return zgz;
	}

	public boolean kannspielen (double g) 
	{
		if (g >=0){return true;}
		else {return false;}
		
		
		
	}
}		

public class Spiel{
	public void main(String[]args)
	{
		public int geld;
		public int zgz1;
		public int zgz2;
		
		
		Double g1 = IO.promptAndReadDouble("Bitte Kapital des ersten Spielers eingeben: ");
		Double g2 = IO.promptAndReadDouble("Bitte Kapital des zweiten Spielers eingeben: ");

		String a = IO.promptAndReadString("Bitte Namen des ersten Spielers eingeben: ");
		String b = IO.promptAndReadString("Bitte Namen des zweiten Spielers eingeben: ");

		Double p = IO.promptAndReadDouble("Bitte Wahrscheinlich keit eingeben (Zahl zwischen 0 und 1): ");

		while(g1 > 0 & g2 > 0)
		{
			double z = Math.random();
			if (z <= p){ g1 = g1 + 1; g2 = g2 - 1; zgz1 = Spieler.zahlGewinnzuege(zgz1); }
			else { g1 = g1 - 1; g2 = g2 + 1; zgz2 = Spieler.zahlGewinnzuege(zgz2); }
		}


		if (Spieler.kannspielen(g1) == true ){zgz2 = zgz2/zgz1*100; System.out.println 
		("Spieler" + a + "ist Pleite! Die gewinn " +
				"Quote des 2 Spilers liegt bei: " + zgz2 );}
		else {zgz1 = zgz1/zgz2*100; System.out.println 
		("Spieler" + b + "ist Pleite! Die gewinn " +
				"Quote des 1 Spilers liegt bei: " + zgz1 );}
	}
}
 
S

SlaterB

Gast
auch das ist eine Java-Grundlage, genau eine public Klasse pro Datei,
am einfachsten immer für jede Klasse eine neue Datei

> und in der main drauf zugreifen

nun ja, dein Programm hapert an vielen Ecken, da kann man nicht alles erklären, aber zumindest dazu noch:

es ist in der Aufgabe nicht die Rede davon, dass du in der main mit irgendwelchen zgz/1/2 Variablen hantierst,
sondern

> Beim Sieger wird auserdem die Zahl der Gewinnzüge hochgezählt.

->
sieger.duHastEinmalGewonnen();
// intern wird dort die Anzahl der Gewinne erhöht,
// die main muss die Variable überhaupt nicht kennen


> Es wird das Verhältnis der Zahl der Gewinnzüge von A zur Zahl der Gewinnzüge von B berechnet und auf zwei Kommastellen ge-rundet ausgegeben.

double quote = a.getAnzahl()/ (double) b.getAnzahl();
// auch hier nie zgz oder ähnliches benötigt
 

assault

Aktives Mitglied
SlaterB hat gesagt.:
> Beim Sieger wird auserdem die Zahl der Gewinnzüge hochgezählt.

->
sieger.duHastEinmalGewonnen();
// intern wird dort die Anzahl der Gewinne erhöht,
// die main muss die Variable überhaupt nicht kennen


> Es wird das Verhältnis der Zahl der Gewinnzüge von A zur Zahl der Gewinnzüge von B berechnet und auf zwei Kommastellen ge-rundet ausgegeben.

double quote = a.getAnzahl()/ (double) b.getAnzahl();
// auch hier nie zgz oder ähnliches benötigt

Hi danke erstmal für den Tip mit der Public, sind sofort paar Fehler weniger. Wusste gar nicht das es nur einmal in der datei geht.
Zum Thema hochzählen, da wüsste ich aber nicht genau wie ich das realisieren soll, weil die gewinnen ja nicht am stück, ich hätte das problem das einfach alle Siege zusammen gezählt werden würden wenn ich nur mit einer Variable hantiere. So wie du mir das erklärt hast (und ich es verstanden habe) müsste ich dann nicht wenigstens in der mthode in der gezählt wird 2 variablen haben und dort iber ne if anweisung iergendwie differenzieren wer gwonnen hat?
 
S

SlaterB

Gast
tja, die Antwort daraus ergibt sich aus einem zentralen Konzept der Aufgabe, das du noch nicht berücksichtigt hast:

> Es werden die zwei Spieler-Objekte A und B erzeugt.

zwei Spieler, jeder zählt für sich sich seine Erfolge

> iber ne if anweisung iergendwie differenzieren wer gwonnen hat?

das if muss in der main stehen, um den Spieler auszuwählen, der gewonnen hat
 

assault

Aktives Mitglied
bekomms irgendwie nicht hin das es anstendig (/überhaupt) läuft,... und versuch jetzt einfach mal die nächste aufgabe step für step (in der Hoffnung das die leichter ist und ichs hinbekomme, dass sie dann tatsächlich läuft...)


bin jetzt soweit das ich eine methode erstellen soll die mir den wert des bruches ausgiebt aber der makert an der stelle schon das "z (bzw. n) can not be resolved", was mache ich heir schon wieder falsch...???
Code:
class bruch{
	public int zaehler;
	public int nenner;
		
	
		public bruch(){
			this (1,1);
		}
		public bruch(int z, int n){
			z = zaehler;
			n = nenner;
			
		}
		public void show(double bruchwert){
			bruchwert = z/n;
		}
}

Edit:
Ich weiss, die z&n Variablen sind oben nicht deklariert, aber mache ich nicht genau deshalb diese "public bruch" um die Variablen daraus zu übernehemen?

Edit:
Glaube habe die Lösung schon selber gefunden

Code:
class bruch{
	public int zaehler;
	public int nenner;
		
	
		public bruch(){
			this (1,1);
		}
		public bruch(int z, int n){
			zaehler = z;
			 nenner = n;
			
		}
		public void show(double bruchwert){
			bruchwert = zaehler/nenner;

müsste doch jetzt laut aufgabe richtig sein oder?
 
S

SlaterB

Gast
gewöhn dir für alle Zeiten an:
wenn du eine Java-Operation mit einem Parameter wie bruchwert hast,
dann solltest du dem normalerweise nix zuweisen, das bringt doch nix,
vor allem wie soll jemand von außen show aufrufen?

in der Aufgabenstellung steht was von ausgeben, nix von double Variable, strenggenommen kann man da nicht wirklich von richtig sprechen,

int/ int ist übrigens nicht so dolle, teste mal was bei 2/5 rauskommt..
 

assault

Aktives Mitglied
SlaterB hat gesagt.:
gewöhn dir für alle Zeiten an:
wenn du eine Java-Operation mit einem Parameter wie bruchwert hast,
dann solltest du dem normalerweise nix zuweisen, das bringt doch nix,
vor allem wie soll jemand von außen show aufrufen?

in der Aufgabenstellung steht was von ausgeben, nix von double Variable, strenggenommen kann man da nicht wirklich von richtig sprechen,

int/ int ist übrigens nicht so dolle, teste mal was bei 2/5 rauskommt..

wegen int stimmt, sehe auch gerade, dass es nicht gehen kann (zumindest werden die ergebnisse nicht stimmen).
wegen der show funktion, müsste ich das dann so ändern?:

Code:
public void show(){
			double bruchwert;
			bruchwert = zaehler/nenner;
		}

normalerweise würrde ich sagen gehört da noch ein "return bruchwert" hin damit ich die Asugabe des wertes hinbekomme, aber ist ja oben ein void drin deshalb meine frage, ginge das trotz des void???
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben