• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

Java proggen: Reihungen und Random-Klasse

Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
Hi.
Aus purer langeweile versuche ich gerade Sachen, die ich einmal für Pascal gelernt hatte auf Java umzumünzen. So wollte ich jetzt eigentlich Sortiermethoden üben, muss aber feststellen, dass es schon an der Deklaration von Reihungen und an der Generation von Zufallszahlen scheitert. Habe mit Hilfe von Google folgendes Ergebnis für den ersten groben Aufbau erzielt:

import java.io.*;
import java.util.*;
public class Sortiermethoden
{
private int[] a = new a[100] ;

public static void init(int[] a)
{
for(int i=0; i<=99; i++)
{
a= Random.nextInt(1000);
}
}
}

allerdings sagt mir der Compiler das er die Klasse a nicht kennt und mit Random.nextInt nichts anfangen kann. Sicher hab ich da nur was falsch interpretiert oder nen Schreibfehler, weiss aber nach ner Stunde weitergooglen und rumprobieren immer noch nicht, woran's liegt.
hlp plz!
:(

*edit: ist der Import von util überhaupt nötig? hab ich bisher noch nie gemacht, war mir aber nicht sicher, ob ich das für Random brauche.
 
Mitglied seit
18.07.2001
Beiträge
2.152
Reaktionen
2
Ort
Nürnberg
ich hab zwar 0,0 ahnung von java aber nextInt() sieht nicht wie ne statische methode aus also solltest du wohl erstmal ne instanz von Random erzeugen.

und new a[100] ... n/c

probiers mal so

Code:
import java.io.*;
import java.util.*;
public class Sortiermethoden
{
private int[] m_a = new int[100] ;

public static void init(int[] a)
{
Random rnd= new Random(); // << hier brauchts evtl. nen seed
for(int i=0; i<=99; i++)
{
m_a[i]= rnd.nextInt(1000);
}
}
}
 
Mitglied seit
05.07.2002
Beiträge
3.716
Reaktionen
0
mmh hab auf diesem pc nix drauf um es auszuprobieren, aber du wirst wohl nen zufallsgenerator objekt erzeugen müssen.

also

Random zufall = new Random();
und dann halt zufall.nextInt(1000);

Statt zufall kannste ihn natürlich auch asdf oder sonstwas nennen.
Soweit ich mich erinnere (habs jetzt nicht nachgeguck) is Random Teil des java.util packets, also musste es auf jeden fall importieren.
Würde aber wohl reichen wenn du import.java.util.Random machst, aber mit * is auch nicht falsch.
 
Mitglied seit
28.07.2006
Beiträge
5.295
Reaktionen
0
Ich hab 2 Java-Bücher zum Verkaufen, einmal Thinking in Java und dann noch "Java 2 - aufregend programmieren"

^^
 

Shihatsu

Administrator
Mitglied seit
26.09.2001
Beiträge
49.590
Reaktionen
10.238
-> Technikforum. Das kennst du, Sholvar...
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
argh. ja. sry shiha, da denk ich immer nich dran.

und thx jetzt kompiliert er es problemlos. Auf das Objekt hätte ich eigentlich selbst kommen müssen. :/
 
Mitglied seit
03.08.2002
Beiträge
707
Reaktionen
0
wieso steht das zeug aus init nicht im konstruktor bzw. wieso ist init statisch bzw. wieso steht da diese private definition?
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
wie kann ich denn den Konstrukter int[] umdefinieren? Ich hab ehrlich gesagt noch nicht verstanden, wie das mit den Arrays in Java alles funktioniert. Sind halt nicht wie jede andere Klasse. Ansonsten finde ich es auch sinnvoller das in einen Konstruktor zu packen.

Alles ist static, weil ich keinen Grund sehe von der Klasse Sortiermethoden, welche nur eine Methodensammlung sein soll, Objekte zu erzeugen.

Private folgt dem Geheimnisprinzip der objektorientierten Programmierung. Alle Attribute einer Klasse mache ich immer Private, dass man von außen nur über Methoden auf sie zugreifen kann.
 
Mitglied seit
03.08.2002
Beiträge
707
Reaktionen
0
wie kann ich denn den Konstrukter int[] umdefinieren? Ich hab ehrlich gesagt noch nicht verstanden, wie das mit den Arrays in Java alles funktioniert. Sind halt nicht wie jede andere Klasse. Ansonsten finde ich es auch sinnvoller das in einen Konstruktor zu packen.

ist glaube ich ein missverständnis, ich habe das anders gemeint :) deine frage mit umdefinieren verstehe ich nicht.

Alles ist static, weil ich keinen Grund sehe von der Klasse Sortiermethoden, welche nur eine Methodensammlung sein soll, Objekte zu erzeugen.

Private folgt dem Geheimnisprinzip der objektorientierten Programmierung. Alle Attribute einer Klasse mache ich immer Private, dass man von außen nur über Methoden auf sie zugreifen kann.

hm, aber ohne objekt kannst du nicht auf eine instanzvariable wie a zugreifen (von einer statischen methode aus).
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
du fragst doch, warum die Sachen aus init nicht im Konstruktor stehen. Meine Antwort ist: Ich weiss nicht wie ich es in den Konstruktor reinkriege. Umdefinieren heisst hier einfach verändern.
 
Mitglied seit
12.01.2004
Beiträge
8.557
Reaktionen
0
Ort
Gießem
Code:
public class Sortiermethoden
{
	public int[] a = new int[100] ;

	public Sortiermethoden()
	{
		for(int i=0; i<=99; i++)
		{
			this.a[i]= Random.nextInt(1000);
		}
	}
}


//in deiner main
Sortiermethoden s = new Sortiermethoden();

/* zugriff über s.a[0,99] oder schreib dir entsprechende get/set methoden */
bitteschön -.-
 
Mitglied seit
17.12.2002
Beiträge
3.117
Reaktionen
0
Du könntest den ganzen Array-Kram auch gleich in die main packen, für diese einfache Rumspielerei mit Durchlaufen und Sortieren reicht das vollkommen..
 

cart

Technik/Software Forum
Mitglied seit
01.08.2002
Beiträge
4.873
Reaktionen
0
Ort
New York
Original geschrieben von sTyLe
Du könntest den ganzen Array-Kram auch gleich in die main packen, für diese einfache Rumspielerei mit Durchlaufen und Sortieren reicht das vollkommen..
Klar. Am besten umgeht man die Idee der OO-Programmierung schon bei den ersten Gehversuchen...
 

The_Company

Guest
Er will ne Sortiermethode schreiben, keine Objekthierarchie. Sonst haetter er mit dem interface Sortiermethode angefangen und es im MeineSortiermethode Objekt implementiert. :p
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
Original geschrieben von Pikkart
Code:
public class Sortiermethoden
{
	public int[] a = new int[100] ;

	public Sortiermethoden()
	{
		for(int i=0; i<=99; i++)
		{
			this.a[i]= Random.nextInt(1000);
		}
	}
}


//in deiner main
Sortiermethoden s = new Sortiermethoden();

/* zugriff über s.a[0,99] oder schreib dir entsprechende get/set methoden */
bitteschön -.-

erstmal danke. aber es ist doch quatsch einen Konstruktor zu machen, wenn man alles static macht. und ich mache nicht ohne grund alles static. Die Klasse ist nur eine Methodensammlung, wie schon gesagt.

Ich dachte es geht darum, die Init() in den Arraykonstruktor i[] zu packen. Und das wollte ich eigentlich wissen, wie man das macht. Init() initialisiert ja nicht das Programm sondern nur die Arrays.
 

Bronzegraf

Guest
Jo hast recht. Die Initialisierung geht auch nicht anders/besser als über eine separate Methode. Allerdings solltest Du mit der Länge vom Array a arbeiten und nicht in der for-Schleife den Wert festschreiben. Also "i < a.length" sollte in der Schleifenbedingung stehen.

Und wenn Du dann noch das private Memberfeld a[] wegmachst, dann ist auch keiner mehr verwirrt. Oder Du machst es auch statisch.

Naja ich denke, Dein Kram funzt auch schon ohne meinen Beitrag -_-
 
Mitglied seit
17.12.2002
Beiträge
3.117
Reaktionen
0
Original geschrieben von cart

Klar. Am besten umgeht man die Idee der OO-Programmierung schon bei den ersten Gehversuchen...
Köstlich. Als ob dieser Kleinkram den ich dann extra als Objekt instantiiere irgendwas mit echter Objektorientierung zu tun hat.
Aber Hauptsache mal schön nachplappern und immer OO zu benutzen, auch wenn es absolut keinen Sinn macht.
 
Mitglied seit
03.08.2002
Beiträge
707
Reaktionen
0
Ich dachte es geht darum, die Init() in den Arraykonstruktor i[] zu packen. Und das wollte ich eigentlich wissen, wie man das macht. Init() initialisiert ja nicht das Programm sondern nur die Arrays.

also sowas wie einen arraykonstruktor gibt es nicht. falls du da irgendwas initialisieren willst, muss man eine neue klasse schreiben die dann die initialisierung übernimmt. sowas wie new[] überschreiben geht glaube ich nur in c++ und ist ausserdem blödsinn.
 

cart

Technik/Software Forum
Mitglied seit
01.08.2002
Beiträge
4.873
Reaktionen
0
Ort
New York
Original geschrieben von sTyLe

Köstlich. Als ob dieser Kleinkram den ich dann extra als Objekt instantiiere irgendwas mit echter Objektorientierung zu tun hat.
Aber Hauptsache mal schön nachplappern und immer OO zu benutzen, auch wenn es absolut keinen Sinn macht.
Er lernt grade OO-Programmierung und da ist es dann wohl sinnvoll auch wirklich OO zu programmieren. Ansonsten kann er auch bei Pascal bleiben.
Was das angebliche Nachplappern angeht: Wo bitte plapper ich was nach?
 

Shihatsu

Administrator
Mitglied seit
26.09.2001
Beiträge
49.590
Reaktionen
10.238
Original geschrieben von sTyLe

Köstlich. Als ob dieser Kleinkram den ich dann extra als Objekt instantiiere irgendwas mit echter Objektorientierung zu tun hat.
Aber Hauptsache mal schön nachplappern und immer OO zu benutzen, auch wenn es absolut keinen Sinn macht.
man verzeihe mir das schlechte beispiel, mit dem ich hier vorran gehe, aber dazu kann ich nur noch eins sagen:

:lol:
 
Mitglied seit
17.12.2002
Beiträge
3.117
Reaktionen
0
DAS war mir klar, das da nicht mehr kommt.
Der Sinn und Zweck von objektorientierter Programmierung liegt sicherlich nicht darin, sie krampfhaft zu benutzen wie im obigen Beispiel.

Ich denke es ist auch gerade für jemanden der gerade auf OO umsteigt viel nützlicher und verständlicher, wenn er sieht wozu sie _wirklich_ gut ist und wo es eben Vorteile bringt. Für sowas wie da oben braucht man sicherlich keine Objekte.
 
Mitglied seit
12.01.2004
Beiträge
8.557
Reaktionen
0
Ort
Gießem
dann sollte man java aber vermeiden, denn dort ist alles ein objekt oO

übrigens: hab mal gehört/gelesen whatever, dass OO für newbies viel verständlicher is als für alteingesessene, die halt vorher imperativ/applikativ entwickelt haben
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
hab ich auch so gehört. kenne einen informatiker, der studiert hat zu zeiten, wo pascal noch superaktuell war und der schafft es überhaupt nicht auch nur in die grundlegensten elemente von Java einzusteigen. :/
 

Bronzegraf

Guest
In Java ist nicht alles ein Objekt: siehe die primitiven Datentypen.

An der anderen Aussage ist bestimmt was dran. Ich hab damals eine ganze Weile gebraucht um mir das Prinzip zu verklickern. Vor allem was man damit alles kann (oder auch nicht). Ich glaube der Einstieg mit nur statischen Methoden ist schonmal nicht schlecht. So bekommt man als Pascalkenner erstmal ein Gefühl für die Syntax in Java. Den Nutzen von Objekten und alles was damit zusammenhängt kann man wohl nur nach und nach durch geeignete Beispiele nachvollziehen.
 
Mitglied seit
12.01.2004
Beiträge
8.557
Reaktionen
0
Ort
Gießem
dann benutze deine primitiven datentypen doch mal außerhalb eines objektes :p

die hab ich jetzt natürlich mal außen vor gelassen -.-
 

Bronzegraf

Guest
Hm?
Ein Beispiel hat der Themenersteller selbst in seinem ersten Beitrag verewigt.
Ist auch egal, wurde eh schon alles gesagt.
 

Bronzegraf

Guest
Hehe nein ist sie nicht.
Eine Klasse ist nur der Bauplan für ihre Instanzen. Letztere sind halt die Objekte.

Also man kann in Java quasi auch prozedural arbeiten, indem man statischen Methoden benutzt und auf "new" verzichtet ;)

Ist zwar eigentlich nicht der Sinn der Sache aber beispielsweise in meinem Informatikgrundstudium waren diese statischen Spielereien der Einstieg in Java (und nebenbei wurden die ganzen verschiedenen Algorithmen so implementiert).
 
Mitglied seit
12.01.2004
Beiträge
8.557
Reaktionen
0
Ort
Gießem
hm grade nochmal rumgelesen, du hast recht. die fehleinschätzung lag wohl daran, dass das Wort "Objekt" gerne und oft benutzt wird und ne Klasse schon eine gewisse ähnlichkeit aufweist ^^
naja so tief steck ich nu auch net in java drin :)
 

Shihatsu

Administrator
Mitglied seit
26.09.2001
Beiträge
49.590
Reaktionen
10.238
Original geschrieben von sTyLe
DAS war mir klar, das da nicht mehr kommt.
Der Sinn und Zweck von objektorientierter Programmierung liegt sicherlich nicht darin, sie krampfhaft zu benutzen wie im obigen Beispiel.

Ich denke es ist auch gerade für jemanden der gerade auf OO umsteigt viel nützlicher und verständlicher, wenn er sieht wozu sie _wirklich_ gut ist und wo es eben Vorteile bringt. Für sowas wie da oben braucht man sicherlich keine Objekte.
Tausend Lehrbücher + meine Lehrer + Das everything is an object-matra von java + üben üben üben von anfang an können nicht irren. nem anfänger gleich mit vererbung, interfaces und co zu kommen ist... nunja. kontraproduktiv weil etwas grosse hürde. lernen geht am besten mit ständigen kleinen erfolgserlebnissen, danach das gelernte immer wieder wiederholen. aber was weiß ich denn schon, verdien damit ja nur mein geld und bilde nebenbei leutz darin aus...
 

The_Company

Guest
Das gute an Java ist, dass man als allererstes erklaeren darf, was "public static void" bedeutet. In Java ist Hello World viel zu gross. Da stecken in dem kleinen Programm schon viel zu viele Dinge drin, die man verstehen muss.

Abgesehen davon: OOP ist hart, ich hab noch niemanden gesehen, der es sofort begriffen hat, egal ob der proggen konnte oder nicht. Gutes Beispiel dafuer ist btw Wikipedia, dass es nicht hinkriegt im ersten Absatz klar (fuer einen Anfaenger) zu sagen, was OOP ist.
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
nö. du musst das nicht alles gleich verstehen. erstmal musst du das nur in den javaeditor schreiben... solang man nur text-aus- und -eingabe macht, ist es garnicht nötig, den rest zu verstehen. Man muss nur wissen dass nach System.out.print in Klammern eine Zeichenkette kommt und das variablenname = din.readline(); (wenn man den bufferedreader din nennt) in variablenname eine Zeichenkette speichert.
 

The_Company

Guest
Man kann auch Hello World schreiben, indem man ne EXE Datei nimmt, sie mit nem Hexeditor aufmacht und "This program does not run in DOS Mode" durch "Hello World\0 does not run in DOS Mode" ersetzt und das Programm dann im DOS Mode startet.

Der Punkt ist, dass es abschreckt, wenn man 20 Zeilen Zeug schreiben muss, das man nicht versteht. Man hat dann eher Angst man macht was kaputt, wenn man sich was traut. Man hat auch nicht das Gefuehl, dass man sein Programm versteht. Weil halt die Haelfte von dem Programm Magie sind.
Wenn Du im Gegensatz dazu sowas wie Python, Basic oder Batch Dateien hat, dann traut man sich locker alles da drin zu machen. Weil man sich nicht fuerchten muss, die Magie kaputt zu machen und dann ne kryptische Fehlermeldung zu bekommen.

PS: Das ganze Argument ist psychologisch, bevor mir jetzt wieder wer mit ner technischen Argumentation kommt.
 
Oben