Ungeordnetes Array ordnen, Zahl einlesen und einordnen

Alpinwhite

Aktives Mitglied
Beispiel (Benutzereingaben in grün):
Ausgabe: Unsortiert: [16,14,7,6,1,13,12,9,3,0]
Ausgabe: Sortiert: [0,1,3,6,7,9,12,13,14,16]
Ausgabe: Welche positive ganze Zahl wollen Sie dem Array hinzufügen?
Eingabe: 15
Ausgabe: 16 wurde mit 15 ersetzt.
Ausgabe: Sortiert mit neuem Element: [0,1,3,6,7,9,12,13,14,15]

Hallo, ich habe das Programm bis zur Benutzereingabe fertig, dort komme ich nicht mehr weiter. Hat jemand einen Tipp?

Java:
import java.util.Random;

public class Array {

    public static void main(String[] args) {
  
    int zufallsZahlen[] = new int[10];
    int z=0;
    int tobeSorted = 0;
    int benutzerEingabe = 0;
  
    System.out.print("Unsortiert: [");
          
    for(int i=0;i<zufallsZahlen.length;i++){
        zufallsZahlen[i] = (int) (Math.random()*20);
        tobeSorted=zufallsZahlen[i];
        z=i-1;
  
        if(i==zufallsZahlen.length-1){
                System.out.print(zufallsZahlen[i]);
        }
            else{
                System.out.print(zufallsZahlen[i]+",");
            }
  
      
      
            while(( z >=0) && (tobeSorted < zufallsZahlen[z])){
                zufallsZahlen[z+1] = zufallsZahlen[z];
                z= z-1;
      
        }
        zufallsZahlen[z+1] = tobeSorted;
    }  
        System.out.println("]");
        System.out.print("Sortiert: [");
        for(int i=0; i<zufallsZahlen.length; i++){
        System.out.print(zufallsZahlen[i]+",");
        }
        System.out.println("]");
        System.out.print("Welche positive ganze Zahl wollen Sie dem Array hinzufügen?");
        benutzerEingabe=Input.readInt();
      
        if(benutzerEingabe>=0 && benutzerEingabe<=zufallsZahlen[9]){
          
        }
    }

}
 
Hallo.

Wo liegt denn das Problem?

Wenn du einem Array ein Wert hinzufügen musst, muss das Array vergrößert werden und der Wert muss hinzugefügt werden.

Es gibt mehrere Möglichkeiten dies zu Bewerkstelligen.

1. Entweder du suchst die richtige Position wo der Wert hin soll und die Werten danach nach hinten verschieben
2. Oder fügst den neuen Wert hinzu und lässt nochmal neu sortieren.

Eine Methode um ein Array zu kopieren:
Java:
System.arraycopy(quelle, 0, result, 0);

Warum das
Java:
benutzerEingabe<=zufallsZahlen[9]
?
 
Zuletzt bearbeitet:
Java:
if(benutzerEingabe>=0 && benutzerEingabe<=zufallsZahlen[9]){
           
            for (int i=0; i<zufallsZahlen.length; i++){
           
                if(benutzerEingabe>=zufallsZahlen[i] && benutzerEingabe<=zufallsZahlen[i+1]){
               
                    benutzerEingabe = zufallsZahlen[i];
 
Zuletzt bearbeitet:
Na dann geh doch durch das Array und schau wo der Wert hinpassen kann?
So wie ich es verstehe soll die Zahl nach der größten "kleineren" Zahl hinkommen.

Code:
Wenn array[i] > eingabe dann array[i-1]  = eingabe ausser wenn i == 0 dann array[i] = eingabe

EDIT:

Edit: und was wenn das letzte Element 15 ist und die neue Eingabe ist 16 ?

Dies sollte man natürlich auch beachten 😀
 
Zuletzt bearbeitet:
Wie lautet denn die gesamte Aufgabenstellung?

Aufgabe 1: Array sortieren und ein altes Element mit einem neuen Element ersetzen Ziel ist es im ersten Schritt ein Array der Länge 10 mit Zufallszahlen zu erzeugen, welches in der Konsole ausgegeben werden soll. Danach sollen die Elemente im Array der Größe nach sortiert werden, beginnend mit dem Kleinsten. Das sortierte Array soll ebenfalls in der Konsole ausgegeben werden. Als zweiten Schritt soll ein neuer Wert (>=0 und kleiner dem größten Element im Array) vom Benutzer eingegeben werden. Ist die Eingabe ungültig, wird das Programm abgebrochen. Das nächstgrößere Element im Array soll durch das neue Element ersetzt werden. Es soll in der Konsole ausgegeben werden, welches Element mit dem neuen Element ersetzt wurde sowie das Array mit neuem Element
 
Na dann versuche es doch jetzt mal umzusetzen was du bis hierhin hast.

Java:
Wenn groeßterWertAusArray < eingabe dann abbruch

In einer Schleife:
Wenn array[j] > eingabe dann array[j] = eingabe.
 
Zuletzt bearbeitet:
So schmeisst er mir die nächstkleinere Zahl aus dem Array:

Java:
if(benutzerEingabe>=0 && benutzerEingabe<=zufallsZahlen[9]){
          
            for (int i=0; i<zufallsZahlen.length; i++){
          
                if(benutzerEingabe>=zufallsZahlen[i] && benutzerEingabe<=zufallsZahlen[i+1]){
              
                    zufallsZahlen[i]=benutzerEingabe;
                  
                  
                  
                }
            }
        }

Aber ich brauche ja die nächstgrössere Zahl und zufallsZahlen[i+1]=benutzerEingabe; akzeptiert er nicht.
 
Dann musst du was falsch gemacht haben, bei mir funktioniert das dann:
Code:
            for (int i=0; i<zufallsZahlen.length-1; i++){
         
                if(benutzerEingabe>zufallsZahlen[i] && benutzerEingabe<=zufallsZahlen[i+1]){
             
                    zufallsZahlen[i+1]=benutzerEingabe;
                }
            }
 
ok danke, habe es jetzt so:

Java:
        if(benutzerEingabe>=0 && benutzerEingabe<=zufallsZahlen[zufallsZahlen.length-1]){
           
            for (int i=0; i<zufallsZahlen.length; i++){
           
                
                    if(benutzerEingabe<zufallsZahlen[i]){
                        zufallsZahlen[i]=benutzerEingabe;
                        break;
                    }
                   
                   
                }
            }
 

Zurück
Oben