Me vs. Java (bzw Algorithmik-Hausis)

PoWerBaR

Semiprofi
Thread Starter
Mitglied seit
11.02.2005
Beiträge
5.056
Ort
im Supermarkt, bei den energiereichen Müsliriegeln
Servus Jungs und Mädels,
ich habe ja neuerdings die Ehre in einer Algorithmitk-Vorlesung zu sitzen, und muss Hausaufgaben machen.
Mir ist klar, das ich sie selber machen muss, deswegen hoffe ich, das ich nie frage: "Macht mal den Code für Aufgabe XYZ", sondern immer "Ich habe das so gelöst, aber hier gehts nicht, habt ihr ne Idee?"
Eigentlich gehört das ja auch in den Hausi-Thread, aber ich denke hier nerve ich nicht die andern mit, und es sehn mehr Leute, die es was angeht ;)

Meine erste (und bestimmt nicht letzte) Frage ist folgende:

ich habe ein Programm, s.u.

Da habe ich Klassen, und Methoden usw... ich mache das mal kleiner und überischtlicher:

Code:
public class Zufallszahl implements IntegerZufall {

	public int intRandom() {
		int zufZahl;
                double zufZahlDouble;

		zufZahlDouble = java.lang.Math.random();
		zufZahl = ((int) (zufZahlDouble*360));
		return zufZahl;

	}

	public static void main(String[] args) {
		int testZahl;
		Zufallszahl KlasseZufall = new Zufallszahl();
		testZahl = KlasseZufall.intRandom();
	        System.out.println("Zufallszahl: " + testZahl);
	}

}

So, das Interface IntegerZufall muss ich implementieren, da steht nur intRandom() drinne... also ohne Rumpf oder so.
Das da oben geht soweit. Allerdings wollte ich noch was andres machen, und da brauche ich eure Hilfe:
Bin leider Neuling was oo-Programmierung angeht :(

Was ich jetzt brauche: ich will, dass ich in der Main-Methode auch auf die Variable zufZahlDouble (rein aus Interesse) zugegriffen werden kann.

Ich dachte, ich mach dann einfahc ein "public" vor die Deklaration. aber "public double zufZahlDouble;" gibt nur nen Fehler, das das hier unerwartet ist...

Ich habe auch shcon den Thread hier "JAVA - Variablen ..." gesehn, allerdings hilft mir das nicht viel, da ich es nicht schaffe, noch eine methode (?) in intRandom einzubauen?!

Danke für eure Hilfe und Sorry für den langen Text!
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
entweder du machst die variable static und klassen-global (lass des, bevor du dich nich mit kapselung genau auskennst), oder du machst nen getter/setter, oder du übergibst die variable als returnwert, oder oder oder... wie hättens denn gern?

ich empfehle dringends, OO basics zu raffen bevor man OO codet ;)
 
Ein paar Dinge die mir aufgefallen sind:
Du benutzt einen Konstruktor fuer die Klasse 'Zufallszahl'. Einen Konstruktor hast du aber gar nicht implementiert.
Es macht IMHO keinen Sinn in einer Klasse welche ein Interface implementiert eine main Funktion einzubauen. Das macht man ueberlicherweise in einer seperaten Klasse.
Einfach public vor die Funktion zu schreiben funktioniert nur wenn du im Interface auch public vor die Funktion schreibst. Aber es vermutlich mehr Sinn die Funktion nicht public zu setzten und fuer die Zufallszahl eine get-Funktion einzubauen.

Mein Vorschlag:
Schreibe eine neue Klasse fuer deine main-Funktion.
Implementiere einen Konstruktor ein deiner Klasse 'Zufallszahl', sowie eine getFunktion, die du public machst.
Dann kannst du in deiner main eine neue Instanz der Klasse erzeugen, so wie es jetzt schon in deinem Code steht, und ueber die get-Funktion auf deine Zufallszahl zugreifen.
 
danke euch beiden schonmal, aber leider kann ich einen teil eurer vorschläge nicht umsetzen: ich kann keine 2te klasse mit der main bauen! einfach weil ich die hausaufgabe digital abgeben muss, und da nur eine datei hochladen kann. und da diese automatisch geprüft wird, empfiehlt es sich auch nicht, diese zu zippen oder ähnliches.

und ja, die aufgabe war so wie ich das gemacht habt gestellt (hoffe ich :d)

das mit dem konstruktor stimmt, aber wie soll ich das den sonst lösen? soll ich lieber noch nen leeren konstruktor einbauen?

das mit der variable hat sich geklärt, ich hatte sie temporär als static in die klasse definiert, dann ging das... brauch ich aber nicht, und ist wieder rausgeflogen...
 
Wenn du keine neue Klasse schreiben willst, dann brauchst du die Klasse auch nicht zu instanzieren. Du brauchst dann auch keinen Konstruktor.
In diesem Fall reicht es aus wenn du die Funktion einfach aufrufst. Die Funktion muss allerdings statisch sein, wenn du sie in der main-Funktion aufrufen moechtest.

Das ist eine Moeglichkeit.

Die zweite waehre es doch einen Konstruktor zu verwenden und in der Klasse eine Instanz von sich selbst zu machen. Dann kannst du meinen Vorschlag, mit der get-Funktion, aus meinem letzten Post verwenden.

Und die 1337 Loesung:
Du baust ganz einfach eine 'Inner Class', welche das Interface implementiert. :d
Beispiel einer 'Inner Class'-Definition: http://java.sun.com/docs/books/tutorial/java/javaOO/innerclasses.html
 
also, danke dir nochmal, ich probiere eben das mal zu verstehn :d

hmm... ich habe das jetzt so wie oben gelöst, dass ich einfach ein neues objekt der klasse in main erzeugt habe, (per impliziten konstruktor) und dann per meineKlasse.methode() ja zugreifen kann...
was spricht den gegen diese lösung?

ok, das mit static werde ich aber auch mal probieren sitze hier schon wieder an der nächsten aufgabe^^

die 1337loösung werde ich mir aber erstmal aussparen :fresse:
 
Code:
import java.lang.Math.*;

//package randomInt;

public class ZufallszahlTest{
	public static void main(String[] args){
		Zufallszahl zufZahl = new Zufallszahl();
		ausgabe("Integer Zufallszahl: "+zufZahl.intRandom());	
	}

	/**
	 * @param ausgabe:String
	 * Erklärt sich hoffentlich von selbst.
	 */
	public void ausgabe(String ausgabe){
		System.out.println(ausgabe);
	}		
}


class Zufallszahl implements IntegerZufall{
	
	/**
	 * Zur Verschönerung ein Konstruktor
	 * @param nichts
	 * In diesem Fall eigentlich total unnötig, aber wems gefällt ;)
	 */
	public IntegerZufall(){
	}
	
	/**
	 * Ich importiere oben alle Klassen von Math, was man eigentlich auch nicht machen muss ;)
	 * Du kannst das Variablengefrimmel ganz listig umgehen, indem du einfach den Wert direkt zurückgibst.
	 * @param wieder nichts
 	 * @return zufallsZahl:int
	 */
	public int intRandom() {
		return ((int) (Math.random()*360));
	}
}

Das ganze bitte als
ZufallszahlTest.java abspeichern und ausführen
 
Zuletzt bearbeitet:
Wenn du das nicht darfst, dann frage ich mich:
1. Was erwartet denn dein Prof von dir ?
2. (Wie oben schon erwähnt) Wieso eine main in eine Subklasse von einem Interface schreiben ?

Gut wenn er es denn unbendingt so haben will:
Code:
public class Zufallszahl implements IntegerZufall{
       public static void main(String[] args){
		Zufallszahl zufZahl = new Zufallszahl();
       }
       
       public IntegerZufall(){
                 ausgabe("Integer Zufallszahl: "+intRandom());	
       }

	/**
	 * @param ausgabe:String
	 * Erklärt sich hoffentlich von selbst.
	 */
	public void ausgabe(String ausgabe){
		System.out.println(ausgabe);
	}

        public int intRandom() {
		return ((int) (Math.random()*360));
	}
}

So jetzt in einer Klasse und ziemlich einfach ;).
Was du prinzipiell lernen solltest:
Du kannst Rückgabewerte einer Funktion direkt ausgeben lassen.
Ebenso können return werte direkt definiert und zurückgegeben werden.
Ist kein großer Zauber, braucht allerdings ein bischen Verständnis wie man mit Rückgabewerten umgehen kann.

Die Ausgabe auf deiner Konsole wäre:
Integer Zufallszahl: 344 wobei 344 zufällg generiert werden würde.
Wie hat man random() zu verstehen ?
Es wird jede Zahl im Intervall (0,1) möglichst gleichmäßig oft generiert.
Was ich nun mache ist folgendes:
Ich gebe jeden random() Wert mal 360 als Integer zurück und das ist ja was du wolltest.
(nebenbei: PI lässt sich über random() berechnen, wenn du willst kann ich dir das zeigen, den Beweis werde ich dir allerdings schuldig bleiben, da wir selbst in ANA noch nicht so weit sind.)

Ich hoffe ich konnte dir helfen
Gruß und gn8

P.S.:
Falls irgendetwas nicht richtig sein sollte schiebe ich das mal auf meinen Promillepegel.
 
Zuletzt bearbeitet:
hrhr... das mit den return-anweisungen hatte ich schon verstanden, das ist eigentlich kein thema, hatte ich nur nicht gemacht, da ich das proggie noch andren weitergegeben habe, damit dies schnallen. und dann lieber so einfach wie möglich ;)

deine lösung gefällt mir aber auch ganz gut, so ähnlich hatte ich es ja letztendlich auch ;)

danke dir auf jeden fall erstmal!

muss heute dann die nächste aufgabe schreiben (ne klasse, die komplexe zahlen addieren, subtrahieren, teilen, multiplizieren, vergleichen, usw. kann)
evtl gibts da wieder ne frage zu ;)
 
jemand ders kann online ;) ?

ich muss ein swing proggie schreiben: 3 buttons, auf klick sollen dann jeweils alle die farbe ändern.

3 buttons untereinander zu bauen ist kein thema, hatten wir als beispiel:

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ButtonBox {
	public static void main(String[] args) {
		JFrame frame = new JFrame("ButtonBox");
		JPanel panel = new JPanel(new GridLayout(3,1));
		JButton knopfGelb = new JButton("faerbe Buttons gelb");
		JButton knopfRot = new JButton("faerbe Buttons rot");
		JButton knopfBlau = new JButton("faerbe Buttons blau");

		panel.add(knopfGelb);
		panel.add(knopfRot);
		panel.add(knopfBlau);
		//addActionListener(this);
		frame.getContentPane().add(panel);
		frame.pack();
		frame .setVisible(true);


	}

}

aber wie kann man da jetzt die funktionen implementieren, dass die ihre farbe ändern? also ich meine wie man überhaupt events abfängt von den jeweiligen buttons sollte erstmal reichen, wie man deren farbe setzt suche ich mir eben selber... danke :bigok:

€: danke, gelöst ;)
 
Zuletzt bearbeitet:
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh