myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   [Hilfe] Zahlensortierer Java (Eclipse o.ä) (https://mygully.com/showthread.php?t=2420800)

Dijar 14.09.11 15:21

[Hilfe] Zahlensortierer Java (Eclipse o.ä)
 
Hey ..

Ich suche ein Programm welches mir in einem Array (Index=0-99) 100 verschiedene Zahlen zwischen 1-100 ausgibt , mir sie dann in die richtige Reihenfolge sortiert (1-100) und dann noch den Maximalen und den Minimalen Wert ausgibt...

Ich krieg's einfach nicht gebacken und wäre euch sehr dankbar wenn ihr mal einen laufenden Quellcode posten könntet..


Lg,
Dijar

Pitsom 14.09.11 15:35

Diese Seite hat mir immer sehr geholfen.

[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

Dijar 14.09.11 15:38

Wenns geht hätte ich trotzdem gerne einen konkreten Quellcode .. Einfach um daraus lernen zu können :P

WodkaBaron 14.09.11 16:24

kein problem: zeig uns wie weit du bisher gekommen bist und wir schauen wo wir dir auf die sprünge helfen können - nur so lernst du etwas.
man könnte dir natürlich auch die lösung geben, aber wo bleibt da der lerneffekt. überdenk deine einstellung nochmal.

Dijar 14.09.11 17:43

Okay kein Problem :)

Die 100 zahlen,minimum und Maximum habe ich soweit .. Mir fehlt noch das sortieren sowie die richtige Setzung alle klammern .. Er sortiert sie mir zwar so halb , dennoch krieg ich jede zahl 5000 ausgegeben und jedes mal ein minimum und ein maximum..
Dennoch haben es viele mit mehreren Klassen zum laufen gekriegt :/ Ich hoffe aber das es auch so geht!

Hier soweit mein Quellcode (Basis hat ein Lehrer für uns geschrieben , ist für die 100rnd zahlen)

Code:

package Blub;
import basis.*;
import java.util.Arrays;
public class Zahlenproblem {

        /**
        * @param args
        */
        public static void main(String[] args) {
               
   
                int max = 0;
                int min = 101;
               
               
               
               
               
                int[] Zahlenfeld = new int[100];
    for (int i=0;i<Zahlenfeld.length;i++){
                        Zahlenfeld[i]=(int) Hilfe.zufall(0,100);
    System.out.println(Zahlenfeld[i]);

    { 
        if (max<Zahlenfeld[i])
            max=Zahlenfeld[i];
   
    if (min>Zahlenfeld[i])
                        min=Zahlenfeld[i];
   
   
    }
        Arrays.sort(Zahlenfeld);
          for(int s : Zahlenfeld)
                System.out.println(i);
     
          }
   
   
    System.out.println("Maximum:" +max);
    System.out.println("Minimum;" +min);
   
    }
}


Thelvan 14.09.11 18:01

Zitat:

Zitat von Pitsom (Beitrag 22722222)
Diese Seite hat mir immer sehr geholfen.

[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

Schön dass sie dir geholfen hat, hat aber 0 mit dem Thema zu tun.
Es geht hier um Java und nicht Javas*****, und die haben fast gar nix gemeinsam außer das java im wort.


@ topic

Guck dir mal auf Wikipedia Bubblesort oder Quicksort an, die Algorithmen sind dort schon in Pseudocode, sollte also kein Problem sein, diese in Java umzusetzen

Dijar 14.09.11 18:07

Keiner da der meinen Quellcode konkret verbessern kann oder selbst zufällig einen hat? :)

Dijar 14.09.11 18:45

/push , ist wichtig hahah :D

Thelvan 14.09.11 19:26

Was genau ist denn dein Fehler?

Was geht denn nicht?

Und was soll das hier sein?

Code:

for(int s : Zahlenfeld)
 System.out.println(i);


urga 14.09.11 19:27

a) dein code ist nen bissl komisch geschweift-geklammert.
b) da ich Hilfe.zufall() nicht habe, gibts eben zufall() als eigene funktion.
c) int[10] statt 100 nur der übersichtlichkeit halber.

richtig:
Code:


import java.util.Arrays;

public class Zahlenproblem {

        private static int zufall(int min, int max) {
                return min + (int) ((max+1-min) * Math.random());

        }

        /**
        * @param args
        */
        public static void main(String[] args) {


                int max = -1;
                int min = 101;

                int[] Zahlenfeld = new int[10];
                for (int i = 0; i < Zahlenfeld.length; i++) {
                        Zahlenfeld[i] = zufall (1,100); // (int) (100 * Math.random() + 1.0);
                        System.out.println("zahl " + i + " == " + Zahlenfeld[i]);

                        if (max < Zahlenfeld[i]) {
                                max = Zahlenfeld[i];
                        }

                        if (min > Zahlenfeld[i]) {
                                min = Zahlenfeld[i];
                        }


                }
                Arrays.sort(Zahlenfeld);
                for (int s : Zahlenfeld) {
                        System.out.println(s);
                }



                System.out.println("Maximum:" + max);
                System.out.println("Minimum;" + min);

        }
}

edit:
ausserdem war
Code:

for(int s : Zahlenfeld)
                System.out.println(i);

falsch. muss for (int i: ...) oder System.out.println(s); heissen. typischer copy-und-paste fehler.

urga 14.09.11 19:28

Zitat:

Zitat von Thelvan (Beitrag 22723209)
Und was soll das hier sein?

Code:

for(int s : Zahlenfeld)
 System.out.println(i);


das ist die java-version von foreach() aus anderen sprachen.

Dijar 14.09.11 19:33

Also mein bisheriges Problem war halt das er ungefähr 10000000 zahlen ausgegeben hat , 0-100 sortiert hat und immer zwischendurch rnd zahlen + max und minimum von mir nicht ersichtbaren zahlen ^^

Die geschweiften Klammern habe ich auch falsch gesetzt wenn ich das richtig sehe :S

Dijar 14.09.11 19:35

@Urga

Ich danke dir vielmals.. problem scheint soweit gelöst zu sein (Y) :)

Dijar 14.09.11 19:38

Ja , meine Fehler sind wohl schon recht blöd einfach ... Ich bin erst gerade dabei mich richtig mit Java und codieren zu befassen und deswegen :/

Epeos 14.09.11 19:38

Thelvans Tip mit Bubblesort ist doch ziemlich gut. Im Wiki-Artikel ist der Algorithmus im Pseudocode implementiert. Das musst Du nur noch in sauberen Java-Code übersetzen. Bei Bubblesort kommst Du mit while und if aus.

Und wenn Du Deinen Quelltext sauber einrückst (nach einer { einrücken, nach } ausrücken), dann erkennst Du vielleicht auch, in welche Schleifendurchläufen Du welche Daten ausgibst.

Und noch ein Tip:
Code:

          for(int s : Zahlenfeld)
                System.out.println(i);

ist ziemlich böse. Weil Du keine {}-Klammern hinter dem for verwendest, wird das System.out als Befehl in der Schleife ausgeführt und nur das System.out. Wenn Du später einen weiteren Befehl in der Schleife ausführen willst, garantiere ich Dir, dass Du ihn eingerückt unter das System.out schreiben wirst und dich anschließend wunderst, warum der Befehl nur einmal ausgeführt wird.

urga 14.09.11 22:30

tipp vom profi (mir):
nimm epeos hinweis ernst!
also immer {} nach for,while,if,else,try,catch, und was es da sonst noch gibt.

Thelvan 15.09.11 18:43

Und jede Curly Bracket in eine neue Zeile !

murve 16.09.11 17:45

Zitat:

Zitat von Thelvan (Beitrag 22726460)
Und jede Curly Bracket in eine neue Zeile !

Muss nicht sieht fürn Code aber eleganter aus.
Desweitern kann ich als Sortieralgorithmen auch StraightSelection oder StraightInsertion empfehlen. BubbleSort wird bei riesigen Arrays riesig Zeitfressend xD

Nightmare2800 17.09.11 10:52

Hallo Dijar,

also wenn ich deine Anforderung richtig verstanden habe willst du als erstes ein Array mit 100 Zahlen füllen. Anschließend diese aufsteigend sortieren und dir am schluss das Min und das Max deines Array ausgeben lasse. Ist das mal soweit richtg?

Mein Vorschlag wäre nun wie folgt.
- Leg dir als erstes einmal dein Array an (in deinem sample int[100])
- Füll dieses array jetzt mit zufälligen Werten (was ich gesehen habe über Hilf.zufall(0,100) )
- Wenn du mit dem Füllen fertig bist, kannst du anfangen zu sortieren. Hierbei ist zu beachten, wenn deine Menge von Zahlen nicht über 10.000 oder so was geht kannst du schon noch nmit einem Bubble sort arbeiten (ich würd es aber trotzdem nicht). Wenn dein Array dann doch größer wird solltest du auf Quicksort umsteigen [1]

- Der Min und Max Wert sind nach dem sortieren ja ganz einfach zu finden: Min = Array[0] und Max is Array[Array.Lenght() -1]

Verzichte wärend dem füllen und sortieren auf ausgaben da sie deinen Code langsam machen!

HTH
Nightmare

[1] [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

Ccursed 19.10.11 21:40

Ehm .. hast du nicht fast den selben Thread schon 4 Tage vorher eröffnet ?
Und sind die Codeabschnitte in dem Thread nicht das was du suchst ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.