importjava.util.*;importjava.io.*;publicclassSortarray{publicstaticintN=2;publicstaticvoidmain(String[] args){int[] array =newint[N];System.out.println("Wie viele Punkte: ");Scanner sc =newScanner(System.in);int number = sc.nextInt();for(int i =0; i <N;++i){
array[i]=(int)(Math.random()*10);}for(int i =1; i < array.length;++i){System.out.println( java.util.Arrays.toString( array ));}System.out.println("Wie soll sortiert werden (1) nach x-Koordinaten,"+"(2) nach y-Koordinaten oder (3) blockweise?");Scanner scan =newScanner(System.in);int sort = scan.nextInt();
java.util.Arrays.sort( array );System.out.println( java.util.Arrays.toString( array ));}}
Der int wert "number" soll die Anzahl für die Arrays sein. Krieg es aber irgendwie nicht hin.. Auch mit einer 2. for-Schleife nicht.
Ja genau, ich frage wie viele Punkte es geben soll. Nur leider wird mir nur ein Array ausgegeben. Aber ich möchte gern so viele Arrays, wie der benutzer in der variable number eingibt erhalten.
Es sollte ungefähr so aussehen:
"wie viele Punkte?"
//Abfrage über Kommandozeile
//Ausgabe der zufalls-Arrays
[8,2]
[2,9]
[8,3]
[...]
...
importjava.util.*;importjava.io.*;publicclassSortarray{publicstaticintN=2;publicstaticvoidmain(String[] args){System.out.println("Wie viele Punkte: ");Scanner sc =newScanner(System.in);int number = sc.nextInt();//number = Anzahl Arraysint[][] array =newint[number][N];//2-dim-Array erstellenfor(int i =1; i <N;++i){
array[number][N]=(int)(Math.random()*10);//Zufallszahlen von 0-9 in das Array packen}//hier fehlt mir die Zuweisung für://number * arraysErstellen//Array ausgebenfor(int i=0;i<array.length;i++){for(int j=0;j<array[i].length;j++){System.out.print(array[i][j]+";");}System.out.println();}
Allerdings hab ich immer noch das Problem, dass ich keine n-beliebigen Arrays erstellen kann
importjava.util.*;importjava.io.*;publicclassSortarray{publicstaticintN=2;publicstaticvoidmain(String[] args){System.out.println("Wie viele Punkte: ");Scanner sc =newScanner(System.in);int number = sc.nextInt();//number = Anzahl Arraysint[][] array =newint[number][N];//2-dim-Array erstellenfor(int i =0; i < array.length;++i){for(int j =0; j < array[i].length; j++){
array[i][j]=(int)(Math.random()*10);//Zufallszahlen von 0-9 in das Array packen}}//Array ausgebenfor(int i=0;i<array.length;i++){for(int j=0;j<array[i].length;j++){System.out.print(array[i][j]+";");}System.out.println();}System.out.println("Wie soll sortiert werden (1) nach x-Koordinaten,"+"(2) nach y-Koordinaten oder (3) blockweise?");Scanner scan =newScanner(System.in);int sort = scan.nextInt();//nach x-Koordinate sortierenArrays.sort( array );System.out.println(Arrays.toString( array ));}}
Kann ich die y-Koordinate nur sortieren, indem ich die Arrays in mehrere aufteile und dann vergleiche und am Ende wieder zusammensetze? Oder gibt es da eine einfache Möglichkeit
Wenn du ein 1D Array (oder noch besser eine List) mit einer Klasse [c]Point[/c] verwenden würdest, könntest du dort einfach [c]compareTo()[/c] überschreiben und beliebig nach x und/oder y sortieren.
Edit: hab gerade gesehen, dass das der Benutzer steuern soll. Da kannst du einen Comparator verwenden. Diesen kannst du natürlich auch mit int[] statt Point verwenden. Ist aber nicht hübsch und funktioniert nicht mit Generics...
Ich hab das mal so halbwegs so umgesetzt. Leider weiß ich nicht, ob mein Ansatz richtig ist. Und mit dem Comparator hab ich so meine Probleme.
Java:
importjava.util.*;importjava.io.*;classKoordinaten{int[] x;int[] y;publicvoidsetX(int[] x){this.x = x;}publicint[]getX(){returnthis.x;}publicvoidsetY(int[] y){this.y = y;}publicint[]getY(){returnthis.y;}}classSortierenimplementsComparator{publicintcompare(){//.... Weiß ich nicht weiter}}publicclassSortarray{publicstaticintN=2;publicstaticvoidmain(String[] args){System.out.println("Wie viele Punkte: ");Scanner sc =newScanner(System.in);int number = sc.nextInt();//number = Anzahl Arraysint[][] array =newint[number][N];//2-dim-Array erstellenfor(int i =0; i < array.length;++i){for(int j =0; j < array[i].length; j++){
array[i][j]=(int)(Math.random()*10);//Zufallszahlen von 0-9 in das Array packen}}//Array ausgebenfor(int i=0;i<array.length;i++){for(int j=0;j<array[i].length;j++){System.out.print(array[i][j]+";");}System.out.println();}System.out.println("Wie soll sortiert werden (1) nach x-Koordinaten,"+"(2) nach y-Koordinaten oder (3) blockweise?");Scanner scan =newScanner(System.in);int sortNumber = scan.nextInt();}}
Vielleicht kannst du mir noch einen Tipp geben, wie ich weiter machen könnte.
Naja, ich habe ja eine X-Koordinate und eine Y-Koordinate. Und dann wollte ich eigentlich den ersten Wert von dem Array an X übergeben und den zweiten Wert an Y damit ich dann nur X mit X vergleichen muss und Y mit Y.
Natürlich kannst du statt [c]List<Point>[/c] auch [c]Point[][/c] und [c]Arrays.sort(Point[], Comparator<Point>)[/c] verwenden - wenn du [c]Point[/c] hast musst du "gegen aussen" nicht mehr mit [c]int[/c] arbeiten.
Jetzt hab ichs so.. Aber irgendwie gehts immer noch nicht..
Java:
importjava.util.ArrayList;importjava.util.Arrays;importjava.util.Collections;importjava.util.Comparator;importjava.util.List;importjava.util.Scanner;publicclassSortarray{publicstaticvoidmain(String[] args){System.out.println("Wie viele Punkte: ");Scanner sc =newScanner(System.in);int number = sc.nextInt();// number = Anzahl Arrays// List<Point> points = new ArrayList<Point>(number);int[] point =newint[number];while(number-->0){int x =(int)(Math.random()*10);int y =(int)(Math.random()*10);}for(int i =0; i < point.length; i++){System.out.print(point[i]+";");}System.out.println();/*
// Array ausgeben
for (Point p : point) {
System.out.println(p);
}
*/System.out.println("Wie soll sortiert werden (1) nach x-Koordinaten,"+"(2) nach y-Koordinaten oder (3) blockweise?");Scanner scan =newScanner(System.in);finalint sortNumber = scan.nextInt();if(sortNumber ==1){Arrays.sort(point,newComparator<Point>(){@Overridepublicintcompare(Point p1,Point p2){return p1.getX()- p2.getX();}});}else{if(sortNumber ==2){Arrays.sort(point,newComparator<Point>(){publicintcompare(Point p1,Point p2){return p1.getY()- p2.getY();}});// Array ausgebenfor(Point p : points){System.out.println(p);}}}classPoint{finalint x;finalint y;publicPoint(int x,int y){this.x = x;this.y = y;}publicintgetX(){returnthis.x;}publicintgetY(){returnthis.y;}@OverridepublicStringtoString(){returngetX()+";"+getY();}}
Wie gesagt, warum int's? Du willst nur ein Array, keine ints...
Wenn du von meiner geposteten Lösung lediglich die Zeilen beginnend mit [c]List<Point> points = ...[/c] durch
Java:
Point[] points =newPoint[number];for(int i =0; i < points.length; i++){int x =(int)(Math.random()*10);int y =(int)(Math.random()*10);
points[i]=newPoint(x, y);}
und [c]Collections.sort()[/c] durch [c]Arrays.sort()[/c] ersetzt, hast du alles mit einem Array.