Zum Forum springen
Benachrichtigungen
Alles löschen

[Geschlossen] Java Hilfe $$ inside

10 Beiträge
4 Benutzer
0 Reactions
1,269 Ansichten
Kranker
Beigetreten: 09.04.2007

Entwickeln Sie ein Programm, das folgende Aufgaben realisiert:

1. Erzeugen der unsortierten Menge mit wählbar n ganzzahligen Elementen
(n > 1000) durch wahlweises
• Eingeben mit Tastatur
oder
• Generieren von nichtnegativen Pseudozufallszahlen mit wählbarem
Größtwert

2. wahlweise, lesbare (Kontroll-)Ausgabe der gesamten Zahlenmenge

3. Sortieren der n Zahlen wahlweise aufsteigend und abfallend mit Selectsort
(Sortieren durch Auswahl); für eine zur Kontrolle des Verfahrens sinnvoll
große Zahlenmenge soll die zeilenweise Ausgabe nach jedem Sortierschritt
optional möglich sein

4. Überprüfen der sortierten Menge auf korrekte Sortierung mit einer Methode.

Erweitern Sie Ihre Lösung um Methoden für:
1. wahlweises Einlesen einer Zahlenmenge von einer wählbaren Datei und
wahlweises Ausgeben einer Zahlenmenge in eine wählbare Datei,
2. Sortieren von n Zahlen wahlweise aufsteigend und abfallend mit Quicksort
(Sortieren durch Partitionieren); zur Kontrolle des Verfahrens soll die
zeilenweise Ausgabe der gesamten, sinnvoll großen Zahlenmenge nach
jedem Sortierschritt optional möglich sein

So hab dies als Praktikumsaufgabe gestellt bekommen und noch nicht wirklich Ideen wie ich die angehen soll. Bin zur Zeit noch auf der Suche nach der richtigen Idee für eine möglichst einfache Umsetzung.

Meine bisherigen Ideen:

Zu 1) nichtnegative Pseudozufallszahl. -> java.util Klasse Random sollte das können.
Zu 2)
Nun gut ich muss also die unsortierte Menge ausgeben. Werde so in einem Array vorliegen haben und dementsprechend nur das Array mit Laufparameter ausgeben.
Zu 3)
Selection Sort ist so wie wir es in der Vorlesung gelernt haben instabil. Laut Wiki gibt es davon allerdings auch eine stabile Variante. Dazu hab ich allerdings keine Idee wodurch sich diese auszeichnen muss. Abfallend würde ich mit dem gleichen Sortieralgorithmus machen und ei8nfach umgekehrt ausgeben. Oder ist es vllt besser die Methode dafür anzupassen?
Zu 4)
Hier hab ich schlichtweg keine Idee. Ich soll also überprüfen ob die sortierte Menge richtig sortiert wurde. Dazu würde ich entweder andere Sortierverfahren wählen und eventuell die Anzahl der Vertauschungen oder Ähnliches zählen und damit auf die richtige Sortierung folgern. Andere Idee wäre jeweils die zweite Zahl von der ersten Zahl abzuziehen und dann auf <0 zu überprüfen. Wiederum keine Ahnung was sich besser realisieren lässt.

Danke für etwaige Hilfe.

Gruß Kranker


9 Antworten

1) java.util.Random da gibts ne Methode nextInt(), das sollte dir helfen
2)StringBuilder sb = new StringBuilder();
for(int i : zahlen){
sb.append(i+" ");
}
System.out.println(sb.toString());
3) Bei Zahlen ist Stabilität egal. Pseudocode implementieren ;)
4) #aufsteigende Sortierung
public boolean check(){
int number = zahlen[0]
for(int i : zahlen){
if(i<number)
return false;
number = i;
}
return true;
}
Edit sagt: Einrückungen verrutscht. Rekonstruier dir die gute Lesbarkeit selbst ;)
sollte das gewünschte tun, bin aber etwas müde grade, probiers aus. Du musst halt im prinzip immer die aktuelle Zahl mit der vorherigen vergleichen.

Datei Einlesen: BufferedReader oder Scanner
Schreiben FileWriter oder BufferedWriter
2. Quicksort pseudo code implementieren.


Kranker Themenstarter
Kranker
Beigetreten: 09.04.2007

1) Ich komm mit dem java.util.Random nicht zurecht. Ich muss es zuerst importieren.
import java.util.Random;
Fehler:
- Syntax error on token "import", assert expected
- java.util.Random cannot be resolved

Weiß nicht was ich falsch mache. Find auch nichts im Netz.


WayneBrady
Beigetreten: 01.02.2008

du darfst die import anweisung nicht in den klassen body schreiben.. die gehört ganz an den Anfang

also so

import java.util.Random;

class Name {

...


Kranker Themenstarter
Kranker
Beigetreten: 09.04.2007

Danke hat geklappt!

public static void main(String[] args){
{int n= 10;
int i=0;
if (i<n-1);
Random Pseudo_neu = new Random();
int p = Pseudo_neu.nextInt();
int unsorted[ ] = new int[n-1];
unsorted= p;
i++;
System.out.println(unsorted[3]);
}}

EDIT:
Habs jetzt mal so geschrieben wie ich dachte: Irgendwie funktioniert das mit der Zufallszahl nicht. Ich bekomm in der Console immer 0 als Ausgabewert. Wenn ich es in System...(unsorted) ändere kommt [I@addbf1. Kann mir nicht erklären was ich machen muss damit ich hier auch richtige Werte raus bekomm. Wäre nett wenn mal jemand drüberschauen könnte.

Da mir die ganze Sachen mit Methoden und Aufrufen neu ist, könnte jemand mal kurz was dazu sagen bezogen auf:

-Ich hab eine Oberklasse von der ich die verschiedenen Methoden aufrufe. Wie mach ich das dann z.B dass ich die obige Methode aufrufe?
-Kann ich in einer Methode eine andere Methode aufrufen? Geht das dann analog?


philwen
Beigetreten: 13.05.2007

ich würde alles in eine klasse schreiben.

dann für jede aktion eine funktion (zufallsarray erstellen, array ausgeben, array sortieren) schreiben

und diese funktionen in der main aufrufen

die funktion:

public void sortArray(){
...
}
ruft man dann mit sortArray(); auf

oder

public int[] sortArray(blubarray int[]){
...}
ruft man mit sortArray(deinarray);

weis nich inwieweit du da schon durchsteigst ;)

dein code stimmt zwar grundlegend jedoch haste ein paar fehelr drinn:

public static void main(String[] args){
int n= 10; (n=anzahl der zahlen)
int i=0;
int unsorted[ ] = new int[n];
Random Pseudoneu = new Random();
if (i<n){
int p = Pseudoneu.nextInt();
unsorted= p;
i++;
}
System.out.println(unsorted[3]);
}

wenn du für jeden schleifendurchgang deine variablen neu initialisierst überschreibst du das bisher gespeciherte...

wenn du fragen hast kannst di ja mal bei mir in skype melden (philwen09), bin zwar kein java-profi aber da kann ich dir noch weiterhelfen ;)

edit: hier wär zB ne while-schleife auch ein bisschen schöner ;)


Kranker Themenstarter
Kranker
Beigetreten: 09.04.2007

Original von philwen
ich würde alles in eine klasse schreiben.

dann für jede aktion eine funktion (zufallsarray erstellen, array ausgeben, array sortieren) schreiben

und diese funktionen in der main aufrufen

Ja so ist es auch angedacht. Habs nur zum ausprobieren einfach in die main class gepackt, konnte das mit dem Aufrufen noch nicht.

public int[] Sort.Array gibt mir dann durch return int[] das sortierte Array zurück, so dass ich es dann in der main zur Verfügung habe, richtig?
Wie mach ich des dann dass ich erst die Funkion aufrufe und dann ausgebe?
Schreib ich wieder public "Array ausgeben" und ruf das dann auf?

Achja und Danke hast mir sehr geholfen.


philwen
Beigetreten: 13.05.2007

int[] blub;
blub=randomarray(blub); (du übergibts der funktion dein array (das 2. blub) und schreibst es wieder in blub)

die ausgebe funktion könnte so ausschaun:

for (int i=0;i<blub.length;i++){
System.out.println(blub;
}


Kranker Themenstarter
Kranker
Beigetreten: 09.04.2007

Nachdem ich die Aufgabe nicht gebacken bekomme folgendes.

Wenn jemand Interesse hat das folgende zu programmieren soll er sich bitte melden. Es handelt sich wahrscheinlich um 2-3 Stunden Arbeit. Kann es selber schwer einschätzen weil ich einfach kompletter Anfänger bin.

Gegenlesitung ist verhandelbar, jedoch nur auf Stars. Aufgabe gibt es per Skype.

Mein Nick dort: daderwal


Kranker Themenstarter
Kranker
Beigetreten: 09.04.2007

Hat sich erledigt. Philwen machts.


Teilen: