Java Zahlen Sortieren

Status
Für weitere Antworten geschlossen.

pinotek

Cadet 2nd Year
Registriert
Feb. 2014
Beiträge
20
Hallo,
in mein Programm soll man Zahlen eingeben und die sollen danach sortiert werden. Dies alles möchte ich gerne nach dem Bubblesort verfahren machen. Nur mein Programm macht keine Ausgabe. Sorry ich bin noch neu in dem Bereich, deswegen hoffe ich auf Konstruktive Antworten.

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaapplication43;

import java.util.Scanner;


public class JavaApplication43 {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
System.out.println("::::::::::::::::::::::");
System.out.println("::::::::::::::::::::::");
System.out.println("::::::::::::::::::::::");
System.out.println(":::Zahlen Sortieren:::");
System.out.println("::::::::::::::::::::::");
System.out.println("::::::::::::::::::::::");
System.out.println("::::::::::::::::::::::");

int[] array = new int[100];

Scanner sc= new Scanner(System.in);

int n = array.length;
int temp;

for (int i= sc.nextInt(); i < n-1; i = i+1)
for (int j = n-1; j > i; j = j-1)
if (array[j-1] > array[j]) {

temp = array[j-1];
array[j-1] = array[j];
array[j] = temp; }


System.out.println("" +array[1]);

System.out.println("" +array[2]);

System.out.println("" +array[4]);

System.out.println("" +array[5]);

System.out.println("" +array[6]);

System.out.println("" +array[7]);
}
}
 
Mit einer For-Schleife das Array durchgehen und am Ende der Zeile ein + "\n" einfügen für den Zeilenumbruch. Kriegst du gar keine Ausgabe oder wie?

Edith: Bitte als CODE-Block einfügen -> ließt sich einfacher ;)
 
Mir wird nur der Teil mit "Zahlen Sortieren" ausgegeben.
 
Es muss keine bestimmte Form vorhanden sein. Ich möchte das halt nach dem Bubblesort verfahren machen und die Zahlen selbst eingeben, der Rest ist mir egal! :)
 
"sc.nextInt()" wartet auf eine Eingabe, deshalb passiert nix. Allerdings ist der Code etwas durcheinender. Nimmst du den Scanner um die Werte zu füllen? Auf jeden Fall wird das Array bei dir nicht richtig mit Daten initialisiert. Vielleicht solltest du Werteeingabe und Sortierung trennen.
 
Ja ich nehme den Scanner um die Werte zu füllen. Mir ist leider kein anderer Weg eingefallen! Das mit dem trennen hatte ich schon probiert, aber da traten noch mehr fehler auf...wie würdet ihr das Array am besten mit Daten initialiseren?
 
pinotek schrieb:
Ja ich nehme den Scanner um die Werte zu füllen. Mir ist leider kein anderer Weg eingefallen! Das mit dem trennen hatte ich schon probiert, aber da traten noch mehr fehler auf...wie würdet ihr das Array am besten mit Daten initialiseren?

Nope, tust du nicht.
So wie du die scanner eingabe verwendest, benutzt die die nicht um das array mit werten zu füllen sondern ledeglich, um den startpunkt der for schleife zu wählen, dein array ist komplett mit Nullen befüllt, sonst nix.
 
Hmmmm....wie fülle ich das array sonst mit Werten?
 
Du kannst zb einen zufallszahlengenerator verwenden und das array mit einer weiteren schleife durchlaufen lassen.
 
Ich möchte meine Zahlen ja selber eingeben, dass ist ja das Problem! :D
 
pinotek schrieb:
Ich möchte meine Zahlen ja selber eingeben, dass ist ja das Problem! :D

Selbes Prinzip, das array mit einer schleife durchlaufen und im rumpf der schleife die scanner methode zur zahleneingabe aufrufen, nicht im kopf der schleife.

zb so:
Code:
Scanner sc= new Scanner(System.in);

for (int i = 0; i < array.length; i++) {
		System.out.println("Zahl für array Position " + i);
		array[i] = sc.nextInt();
	}
//Scanner objekte immer schließen!
sc.close();

Du musst dann halt 100 Zahlen manuell eingeben, viel spass dabei...
 
Okay danke!
Das hilft mir erstmal weiter, nur muss ich das ganze jetzt noch berechnen:o
 
Die Schleife vom "dummen Punkt" muss vor deine beiden Schleifen.

Du musst außerdem bei deiner ersten for Schleife bei "i = 0" beginnen, denn das ist der erste Index des Arrays - in der Informatik wird immer mit der 0 angefangen zu zählen. Das würdest du auch spätestens bei deiner Textausgabe merken. Hierzu ist allgemein anzumerken, dass du das auch besser in einer Schleife erledigen solltest.
Und für den Anfang solltest du die Länge deines Arrays vllt. erstmal auf z.B. 5 setzen, oder über die erste Scannereingabe bestimmen.

Edit: Was musst du denn noch groß "berechnen"?^^
 
Zuletzt bearbeitet:
pinotek schrieb:
Mir wird nur der Teil mit "Zahlen Sortieren" ausgegeben.

Das ist nicht richtig. Das Programm wartet auf eine Eingabe. Wenn du nur eine Zahl eingibst, dann funktioniert es. (und dann Enter drückst).
Bei mehr Zahlen oder anderen Zeichen funktioniert es nicht mehr.
Abhilfe schafft hier folgende Variation oder ähnliche.

Code:
      int n = 0;
      // zum fuellen des Arrays mit Zahlen (immer durch Enter getrennt, bei anderer Eingabe oder wenn voll ist Ende)
      while (sc.hasNextInt() && n < array.length) {
         array[n] = sc.nextInt();
         n++;
      }

     sc.close();

Danach kannst du das Array mit den Zahlen sortieren.
 
Naja, bei mir gibt er es noch nicht richtig aus, somit muss ich noch einiges Umformen?:D
 
pinotek schrieb:
Naja, bei mir gibt er es noch nicht richtig aus, somit muss ich noch einiges Umformen?:D

Egtl. nicht, weil schon alles gesagt wurde. Vllt. benutzt du den Scanner nicht richtig.

Wie gesagt die Schleife vom "dummen Punkt" kann 1 zu 1 so vor deine beiden Schleifen. Bei deiner ersten for-Schleife startest du wie geschrieben bei "i=0"! Und ersetzt deine Textausgabe auch besser durch eine Schleife. Wie gesagt für den Anfang vllt. die Arraysize noch auf 5 setzen.

Startest du das Programm so, wird zunächst der Teil mit "...Zahlen sortieren..." ausgegeben. Darunter gibst du in der Konsole z.B. "1 4 2 8 5" ein und bestätigst mit Enter --> läuft.
 
Mein Programm sieht jetzt so aus. Es sortiert jetzt auch! Nur würde ich gerne die Funktion von "DasBoeseLebt" umsetzen, also bei einer anderen Eingabe schon sortieren. Wie setze ich das jetzt bei meinem Programm am besten um? Sorry wenn ich es einfach nicht checke! :D


Code:
 System.out.println("::::::::::::::::::::::");
    System.out.println("::::::::::::::::::::::");
    System.out.println("::::::::::::::::::::::");
    System.out.println(":::Zahlen Sortieren:::");
    System.out.println("::::::::::::::::::::::");
    System.out.println("::::::::::::::::::::::");
    System.out.println("::::::::::::::::::::::");

    int[] array = new int[5];



    int n = array.length;
    int temp;


    Scanner sc= new Scanner(System.in);

        for (int i = 0; i < array.length; i++) {
        System.out.println("Bitte eine Zahl eingeben: ");
        array[i] = sc.nextInt();
        }

        sc.close();

    for (int i=0; i < n-1; i = i+1)
    for (int j = n-1; j > i; j = j-1)
    if (array[j-1] > array[j]) {

    temp = array[j-1];
    array[j-1] = array[j];
    array[j] = temp; }


    System.out.println("" +array[1]);

    System.out.println("" +array[2]);

    System.out.println("" +array[4]);

    System.out.println("" +array[5]);

    System.out.println("" +array[6]);

    System.out.println("" +array[7]);
    }
}
 
Ich nehm an mit "anderer Eingabe sortieren" meinst du, wenn du z.B. mehr oder weniger als 5 Zahlen eingeben willst?
Dann kannst du wie gesagt eben die Länge von deinem Array auch vorher festlegen - z.B. auch über den Scanner:

Code:
public static void main(String[] args) {
		System.out.println("::::::::::::::::::::::");
		System.out.println("::::::::::::::::::::::");
		System.out.println("::::::::::::::::::::::");
		System.out.println(":::Zahlen Sortieren:::");
		System.out.println("::::::::::::::::::::::");
		System.out.println("::::::::::::::::::::::");
		System.out.println("::::::::::::::::::::::");

		Scanner sc = new Scanner(System.in);
		
		System.out.println("Bitte die Arraysize eingeben: ");
		int size = sc.nextInt();
		
		int[] array = new int[size];

		int n = array.length;
		int temp;


		for (int i = 0; i < array.length; i++) {
			System.out.println("Bitte eine Zahl eingeben: ");
			array[i] = sc.nextInt();
		}

		sc.close();

		for (int i = 0; i < n - 1; i = i + 1)
			for (int j = n - 1; j > i; j = j - 1)
				if (array[j - 1] > array[j]) {

					temp = array[j - 1];
					array[j - 1] = array[j];
					array[j] = temp;
				}

		for (int v = 0; v < n; v++) {
			System.out.println(array[v]);
		}
	}
 
pinotek schrieb:
Mein Programm sieht jetzt so aus. Es sortiert jetzt auch! Nur würde ich gerne die Funktion von "DasBoeseLebt" umsetzen, also bei einer anderen Eingabe schon sortieren. Wie setze ich das jetzt bei meinem Programm am besten um? Sorry wenn ich es einfach nicht checke! :D

Die "Funktion" von dasboeselebt ist auch nur eine weitere variante das array zu befüllen, allerdings als while und nicht als for schleife gelöst. Sortiert wird hier garnichts.
Ich verstehe ehrlich gesagt garnicht, was du hier tun willst.
Warum willst du, dass nach jeder eingabe einer Zahl ins array das array sortiert wird?
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben