Hallo, guten Abend
Ich stehe so richtig auf dem Schlauch. Ich versuche eine Aufgabe zu lösen, die sich um 2D Arrays dreht.
Es geht darum, dass zuerst ein int[][] array erzeugt werden soll. Die Größe dieses 2D-Arrays soll durch einen Kommandozeilenparameter (args[1]) festgelegt werden, praktisch (args[1])^2. Die Ausgabe soll in Matrixform geschehen.
Jetzt soll ein weiterer Parameter (args[0]), in Form einer Fließkommazahl, willkürlich auf eines der Felder platziert werden. Dann soll eine Schleife dafür sorgen, dass dieses spezielle Feld pro Schleifendurchlauf die Anderen verändert (seinen Wert zuweist) und zwar mit einer Wahrscheinlichkeit, welche der eingegebenen Fliesskommazahl entspricht. Die veränderbaren Felder sollen nur unmittelbare Nachbarn sein und zwar nur horrizontal und vertikal. Diagonal ist verboten. Die Schleife soll abbrechen, wenn alle möglichen Nachbarfelder verändert wurden (wo die Wahrscheinlichkeit gegriffen hat).
Und zu guter Letzt soll es noch ein 2D- Array geben vom Typ char, wo in Zeichen visualisiert werden soll, welche Felder sich verändert haben und welche nicht (z.B. mit '+', '-').
So weit bin ich nun:
[CODE lang="java" title="Klasse Main"]public class Main {
public static void main(String[] args) {
float eingabe1 = Float.parseFloat(args[0]);
int eingabe2 = Integer.parseInt(args[1]);
Arraykommunikation arraykommunikation = new Arraykommunikation(eingabe1, eingabe2);
arraykommunikation.veraenderung();
System.out.println();
arraykommunikation.anzeige();
}
}[/CODE]
[CODE lang="java" title="Die Methoden"]import java.util.Random;
public class Arraykommunikation {
private float wahrscheinlichkeit;
private int groesse;
//Konstruktor
public Arraykommunikation(float wWahrscheinlichkeit, int gGroesse) {
wahrscheinlichkeit = wWahrscheinlichkeit;
groesse = gGroesse;
}
//Gettermethoden
public float getWahrscheinlichkeit() {
return wahrscheinlichkeit;
}
public int getGroesse() {
return groesse;
}
public void veraenderung() {
Random random = new Random();
int[][] arr = new int[getGroesse()][getGroesse()];
//Beschreiben des Arrays mit Nullen
for(int a = 0; a < arr.length; a++) {
for(int b = 0; b < arr.length; b++) {
arr[a] = 0;
}
}
//Zufälliges Feld wird verändert
int randomindex1 = random.nextInt(getGroesse());
int randomindex2 = random.nextInt(getGroesse());
arr[randomindex1][randomindex2] = 1;
/*
// while(Abbruchbedingung alle möglichen Felder nach Vorgabe verändert) {
if(getWahrscheinlichkeit > 100.0) {
System.out.println("Falsche Eingabe! Bitte eine Wahrscheinlichkeit bis 100.0 eingeben!");
continue;
}
//Wenn Bedingung erfüllt, verändere Nachbarfelder
if((Math.random() *10 <= getWahrscheinlichkeit()) {
//Verändere
}
else if((Math.random() *100 <= getWahrscheinlichkeit()) {
//Verändere
}
} //Schleifenende
*/
//Ausgabe des Arrays in Matrixform
for(int c = 0; c < arr.length; c++) {
for(int d = 0; d < arr.length; d++) {
System.out.print(arr[c][d] + " ");
}
System.out.println();
}
// }
}
public void anzeige() {
char[][] anzeige = new char[getGroesse()][getGroesse()];
for(int i = 0; i < anzeige.length; i++) {
for(int j = 0; j < anzeige.length; j++) {
anzeige[j] = '-';
}
}
for(int k = 0; k < anzeige.length; k++) {
for(int l = 0; l < anzeige.length; l++) {
System.out.print(anzeige[k][l] + " ");
}
System.out.println();
}
}
}[/CODE]
Der Code kompiliert bei mir. Die auskommentierten Zeilen sind meine zusätzlichen Ideen.
Mit dem Verändern, da denke ich gerade an "Pathfinding", bekomme es aber nicht umgesetzt: Es sollen ja alle Nachbarfelder mit der gleichen Wahrscheinlichkeit angesprochen werden. Da entsteht oder soll ein exponentielles Wachstum entstehen. Und wie macht man es, dass ein bereits verändertes Feld NICHT mehrmals verändert wird? Ich habe keine Ahnung.
Das Schwierigste ist aber wie das int[][] und das char[][] Array synchronisiert werden? Hat jemand eine Idee?
Lieben Dank schon mal.
PS Wenn ich mich unverständlich ausgedrückt haben sollte, bitte noch einmal nachfragen. Ich habe im Moment Fieber und unter solchen Bedingungen habe ich Mühe zu programmieren. Ich muss aber, weil die Aufgabe bewertet wird.
Ich stehe so richtig auf dem Schlauch. Ich versuche eine Aufgabe zu lösen, die sich um 2D Arrays dreht.
Es geht darum, dass zuerst ein int[][] array erzeugt werden soll. Die Größe dieses 2D-Arrays soll durch einen Kommandozeilenparameter (args[1]) festgelegt werden, praktisch (args[1])^2. Die Ausgabe soll in Matrixform geschehen.
Jetzt soll ein weiterer Parameter (args[0]), in Form einer Fließkommazahl, willkürlich auf eines der Felder platziert werden. Dann soll eine Schleife dafür sorgen, dass dieses spezielle Feld pro Schleifendurchlauf die Anderen verändert (seinen Wert zuweist) und zwar mit einer Wahrscheinlichkeit, welche der eingegebenen Fliesskommazahl entspricht. Die veränderbaren Felder sollen nur unmittelbare Nachbarn sein und zwar nur horrizontal und vertikal. Diagonal ist verboten. Die Schleife soll abbrechen, wenn alle möglichen Nachbarfelder verändert wurden (wo die Wahrscheinlichkeit gegriffen hat).
Und zu guter Letzt soll es noch ein 2D- Array geben vom Typ char, wo in Zeichen visualisiert werden soll, welche Felder sich verändert haben und welche nicht (z.B. mit '+', '-').
So weit bin ich nun:
[CODE lang="java" title="Klasse Main"]public class Main {
public static void main(String[] args) {
float eingabe1 = Float.parseFloat(args[0]);
int eingabe2 = Integer.parseInt(args[1]);
Arraykommunikation arraykommunikation = new Arraykommunikation(eingabe1, eingabe2);
arraykommunikation.veraenderung();
System.out.println();
arraykommunikation.anzeige();
}
}[/CODE]
[CODE lang="java" title="Die Methoden"]import java.util.Random;
public class Arraykommunikation {
private float wahrscheinlichkeit;
private int groesse;
//Konstruktor
public Arraykommunikation(float wWahrscheinlichkeit, int gGroesse) {
wahrscheinlichkeit = wWahrscheinlichkeit;
groesse = gGroesse;
}
//Gettermethoden
public float getWahrscheinlichkeit() {
return wahrscheinlichkeit;
}
public int getGroesse() {
return groesse;
}
public void veraenderung() {
Random random = new Random();
int[][] arr = new int[getGroesse()][getGroesse()];
//Beschreiben des Arrays mit Nullen
for(int a = 0; a < arr.length; a++) {
for(int b = 0; b < arr.length; b++) {
arr[a] = 0;
}
}
//Zufälliges Feld wird verändert
int randomindex1 = random.nextInt(getGroesse());
int randomindex2 = random.nextInt(getGroesse());
arr[randomindex1][randomindex2] = 1;
/*
// while(Abbruchbedingung alle möglichen Felder nach Vorgabe verändert) {
if(getWahrscheinlichkeit > 100.0) {
System.out.println("Falsche Eingabe! Bitte eine Wahrscheinlichkeit bis 100.0 eingeben!");
continue;
}
//Wenn Bedingung erfüllt, verändere Nachbarfelder
if((Math.random() *10 <= getWahrscheinlichkeit()) {
//Verändere
}
else if((Math.random() *100 <= getWahrscheinlichkeit()) {
//Verändere
}
} //Schleifenende
*/
//Ausgabe des Arrays in Matrixform
for(int c = 0; c < arr.length; c++) {
for(int d = 0; d < arr.length; d++) {
System.out.print(arr[c][d] + " ");
}
System.out.println();
}
// }
}
public void anzeige() {
char[][] anzeige = new char[getGroesse()][getGroesse()];
for(int i = 0; i < anzeige.length; i++) {
for(int j = 0; j < anzeige.length; j++) {
anzeige[j] = '-';
}
}
for(int k = 0; k < anzeige.length; k++) {
for(int l = 0; l < anzeige.length; l++) {
System.out.print(anzeige[k][l] + " ");
}
System.out.println();
}
}
}[/CODE]
Der Code kompiliert bei mir. Die auskommentierten Zeilen sind meine zusätzlichen Ideen.
Mit dem Verändern, da denke ich gerade an "Pathfinding", bekomme es aber nicht umgesetzt: Es sollen ja alle Nachbarfelder mit der gleichen Wahrscheinlichkeit angesprochen werden. Da entsteht oder soll ein exponentielles Wachstum entstehen. Und wie macht man es, dass ein bereits verändertes Feld NICHT mehrmals verändert wird? Ich habe keine Ahnung.
Das Schwierigste ist aber wie das int[][] und das char[][] Array synchronisiert werden? Hat jemand eine Idee?
Lieben Dank schon mal.
PS Wenn ich mich unverständlich ausgedrückt haben sollte, bitte noch einmal nachfragen. Ich habe im Moment Fieber und unter solchen Bedingungen habe ich Mühe zu programmieren. Ich muss aber, weil die Aufgabe bewertet wird.