OOP Würfel Problem

Manu3991

Mitglied
Hey Leute, sitze zur zeit an folgender Aufgabenstellung:+

1.1
Erzeugen Sie die Klasse Wuerfel in Java. Sie soll eine Methode wuerfele(char, char)
enthalten. Ihre Parameter sind der niedrigste und höchste würfelbare Buchstabe (beide
inklusive und in alphabetischer Reihenfolge). Die Methode soll den gewürfelten Buch-
staben zurückgeben.
Verwenden Sie zum Erzeugen einer Zufallszahl die Methode Math.random().
Beachten Sie, dass random() eine Kommazahl im Wertebereich "0 kleinergleich random() kleinergleich 1" zurückgibt. Da Buchstaben in Java intern durch Zahlen dargestellt werden, kann der Wertebereich skaliert und verschoben werden, um das gewünschte Ergebnis zu erzielen.
Achten Sie besonders darauf, dass der angegebene höchstmögliche Buchstabe auch tatsächlich gewürfelt werden kann.

1.2
Erzeugen Sie eine zweite Klasse namens Test, deren Aufgabe es ist, den gewünsch-
ten Buchstabenbereich vom Benutzer zu erfragen, einen Wuerfel zu erzeugen und die
Methode wuerfele(char, char) der vorigen Aufgabe mit dem vom Benutzer eingege-
benen Bereich aufzurufen. Der gewürfelte Buchstabe soll anschließend ausgegeben wer-
den. Implementieren Sie diese Funktionalität in einer Methode public static void
main(String[] args). Verwenden Sie für die Benutzereingabe die Klasse Scanner.
Ein Zeichen kann mittels nextLine().charAt(0) erfragt werden.

So sehen meine 2 Klasse bisher aus:

Code:
public class Wuerfel
{
	    // Variablendeklaration
		private char gewuerfelt;
		char niedrigstes, hoechstes;   // Würfelbares Zeichen
		
		// Standardkonstruktor
		public Wuerfel()
		{
			wuerfele(niedrigstes, hoechstes);
		}
		
		// Methode wuerfele
		public void wuerfele(char niedrigstes, char hoechstes)
		{
			gewuerfelt = (char)(Math.random());
		}
		
		// Getter Methode
		public int getGewuerfelt()
		{
			return gewuerfelt;
		}
}

Code:
import java.util.Scanner;

public class Test
{
	
	public static void main(String[] args)
	{	
		Scanner eingabe = new Scanner (System.in);
		String input = eingabe.nextLine();
		
		
		System.out.println("Geben Sie das niedrigstmögliche Zeichen an: ");
		char niedrigstes = input.charAt(0);
		
		
		System.out.println("Geben Sie das höchstmöglichen Zeichen an: ");
		char hoechstes = input.charAt(0);
	}
}

Ich hoffe, dass zumindest die Klasse "Wuerfel" richtig ist, wobei ich mir aber nich sicher bin ob die getter Methode benötigt wird.

Aber wie ich ein zufälliges Zeichen erzeugen kann weiß ich nicht genau und wie ich den Aufgabenteil: "...einen Wuerfel zu erzeugen und die Methode wuerfele(char, char) der vorigen Aufgabe mit dem vom Benutzer eingegebenen Bereich aufzurufen. Der gewürfelte Buchstabe soll anschließend ausgegeben werden" lösen soll hab ich ehrlich gesagt auch keinen blasse Schimmer... :bahnhof:

Hoffe ihr könnt mir helfen, mfg Manuel 🙂
 
Zuletzt bearbeitet:
Ich hoffe, dass zumindest die Klasse "Wuerfel" richtig ist, wobei ich mir aber nich sicher bin ob die getter Methode benötigt wird.

Nein.

Die Methode soll den gewürfelten Buchstaben zurückgeben.

Deine Methode gibt nichts zurück.

Der gewürfelte Buchstabe soll anschließend ausgegeben werden" lösen soll hab ich ehrlich gesagt auch keinen blasse Schimmer..

Nun ja, du musst die erzeugte Zahlt durch Multiplizieren und Addieren mit anderen Zahlen so einschränken, das sie zwischen dem min und max Wert liegt.
 
Aber ich hab doch den return wert "gewuerfelt"?!
Warum gibt die Methode dann nichts zurück, oder was genau bedeutet eigentlich "zurückgeben"?

Ich hab keine Ahnung wie ich das hinbekommen soll, geht ja auch um char und keine ganz normale int variable, wie soll man denn mit Zeichen rechnen können?

Beschäftige mich noch nich lange mit java, deswegen die Ahnungslosigkeit bezüglich methoden, konstruktoren und dem ganzen kram 😱
 
Diese Methode
Java:
public void wuerfele(char niedrigstes, char hoechstes)
		{
			gewuerfelt = (char)(Math.random());
		}
gibt definitiv nichts zurück, da sie keinen Rückgabetyp hat.

So
Java:
public char wuerfele(char niedrigstes, char hoechstes)
		{
			return gewuerfelt = (char)(Math.random());
		}
gibt sie "gewuerfelt" zurück. Die Übergabeparameter verwendest Du aber nicht.

Man kann mir Charactern rechnen. Probier mal aus ;-)
Java:
char a = 'a';
char b = 'b';
System.out.println(a + b);
//Ergebnis 195

Grüße!
 
Ah danke 🙂
fertig bin ich mit dem drecksprogramm allerdings noch lange nicht... ;(

Hier hänge ich im Moment:

Code:
public class Wuerfel
{
	   
		private char gewuerfelt;
		char niedrigstes, hoechstes;
		
		public Wuerfel()
		{
			wuerfele(niedrigstes, hoechstes);
		}
		

		public char wuerfele(char niedrigstes, char hoechstes)
		{
			return gewuerfelt;
			double random = Math.random();
			char randomChar = (char) random;

			// ?

			System.out.println("Gewuerfeltes Zeichen: " + randomChar);
		}
			
}
Code:
import java.util.Scanner;

public class Test
{
	
	public static void main(String[] args)
	{	
		String userInput;
		
		Scanner eingabe = new Scanner (System.in);
		userInput = eingabe.nextLine();
		
		System.out.println("Geben Sie das niedrigstmögliche Zeichen an: ");
		char niedrigstes = userInput.charAt(0);
		
		System.out.println("Geben Sie das höchstmöglichen Zeichen an: ");
		char hoechstes = userInput.charAt(0);
		
		Wuerfel w1 = new Wuerfel();
		w1.wuerfele(userInput, userInput);   // ?
	}

}

In der Klasse Wuerfel meckert der compiler über "double random = Math.random();".
Ich hab keine ahnung wie ich da was casten muss (müsste ja eigentlich von double nach char sein oder? weil Math.random einen doublewert zwischen 0 und 1 generiert, aber ich ja n Zeichen haben will.), damit der vom Benutzer eingegebene zeichenbereich eingehalten wird und was für werte jedes einzelne zeichen wie z.b. 'a' oder 'b' hat und von daher weiß ich auch nich wie ich Math.random(); anpassen muss um der Aufgabenstellung gerecht zu werden...

In der Klasse Test dachte ich, dass ich eigentlich 2 chars einlese aber mir wird gesagt dass "userInput" 2 Strings sind, warum auch immer.

Beste Grüße, Manuel.
 
du schreibst direkt in der ersten Zeile
Code:
return gewuerfelt;
das beendet die Methode, alle folgenden Zeilen können nichtmehr erreicht werden, das meckert eclipse an.

Ich hab keine ahnung wie ich da was casten muss (müsste ja eigentlich von double nach char sein oder? weil Math.random einen doublewert zwischen 0 und 1 generiert, aber ich ja n Zeichen haben will.), damit der vom Benutzer eingegebene zeichenbereich eingehalten wird und was für werte jedes einzelne zeichen wie z.b. 'a' oder 'b' hat und von daher weiß ich auch nich wie ich Math.random(); anpassen muss um der Aufgabenstellung gerecht zu werden...
Lös das doch erstmal etwas einfacher... lass dir 2 Zahlen übergeben und generier eine Zufallszahl die zwischen den beiden Zahlen liegt, das ganze dann auf chars umzubauen ist ne kleinigkeit (nen char ist im prinzip auch nur ne zahl).
 
Also, ich bin nun fast fertig, denke ich^^
1 Problem krieg ich aber einfach nich hin, nämlich wie ich es in der Klasse "Test" hinbekomme dass die 2 Benutzereingaben als 2 chars gelten, damit die mit der "wuerfele" Methode der Klasse "Wuerfel" übereinstimmt...

Code:
public class Wuerfel
{
	private double wert;
	private char gewuerfelt;
		
   	public Wuerfel()
	{
	}

		
	public void wuerfele(char obergrenze, char untergrenze)
	{
        wert = Math.round(Math.random() * (obergrenze - untergrenze)) + untergrenze;
        this.gewuerfelt = (char)wert;
        }

	
    public char getWert()
    {
       return gewuerfelt;
    }
				
}

Code:
import java.util.Scanner;

public class Test
{
	
	public static void main(String[] args)
	{	
		String userInput;
		
		Scanner eingabe = new Scanner (System.in);
		
		System.out.println("Geben Sie das niedrigstmögliche Zeichen an: ");
		char niedrigstes = userInput.charAt(0);
		userInput = eingabe.nextLine();
		
		System.out.println("Geben Sie das höchstmöglichen Zeichen an: ");
		char hoechstes = userInput.charAt(0);
		userInput = eingabe.nextLine();
		
		Wuerfel w1 = new Wuerfel();
		w1.wuerfele(userInput);
		
		System.out.println("Das zufällige Zeichen ist: " + w1.getWert());
	}

}
 
Moin,

Deine Methode "wuerfele" erwartet ZWEI Werte !

Du übergibst aber nur einen - und zwar immer den letzten eingelesenen !

Ich würde es mal so versuchen :
Java:
public static void main(String[] args)
	{	
		String userInput_min;  // ! ! !
		String userInput_max;  // ! ! !

		Scanner eingabe = new Scanner (System.in);
		
		System.out.println("Geben Sie das niedrigstmögliche Zeichen an: ");
		char niedrigstes = userInput.charAt(0);
		userInput_min = eingabe.nextLine();
		
		System.out.println("Geben Sie das höchstmöglichen Zeichen an: ");
		char hoechstes = userInput.charAt(0);
		userInput_max = eingabe.nextLine();
		
		Wuerfel w1 = new Wuerfel();
		w1.wuerfele( userInput_min, userInput_max );
		
		System.out.println("Das zufällige Zeichen ist: " + w1.getWert());
	}

Ungetestet !

Gruß
Klaus
 
Stimmt is sinnvoll (auch wegen der übersichtlichkeit), aber sind trotzdem immernoch Strings und keine chars, also gehts leider immernoch nicht :/ trotzdem danke^^
 
Moin,

Stimmt is sinnvoll (auch wegen der übersichtlichkeit)
nee, ist zwingend notwendig 😉


aber sind trotzdem immer noch Strings und keine chars, also gehts leider immernoch nicht
Sorry, DU hattest dort Strings genommen 😀

Dann lies entweder direkt als char ein oder konvertiere den Wert.
Du kannst auch sowas wie
Java:
String myString = "abc";
char myChar = myString.charAt( 1 );  
// myChar enthält jetzt jetzt 'b';
verwenden!

Schau einfach mal mehr in API, da steht alles drin !
Java Platform SE 6

Gruß
Klaus
 
Naja habs jetzt irgendwie hinbekommen dass es keine Fehler mehr gibt, aber hab wohl irgendwas falsch gemacht weil das Zeichenintervall nie eingehalten wird -.- Aber egal, hab kb mehr darauf jetzt^^ vielen Dank an alle für die Hilfe, lg Manu 🙂
 

Zurück
Oben