G
Guest
Gast
Hallo!
Ich habe ein kleines Sandhaufenmodell geschrieben, aber es funktioniert nicht ganz wie es sollte:
Was ist falsch daran?
Wenn ich bei der Aufforderung zur Zahleneingab immer 1 drücke, kommt folgende Fehlermeldung :
Bitte geben Sie Breite und Höhe ein:
1
1
Bitte geben Sie das max. Fassungsvermögen einer Zelle ein
1
Wieviele Sandkörner wollen sie max. auf einmal eingeben?
1
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at Sandhaufenmodell.verteilung(Sandhaufenmodell.java:62)
at Sandhaufenmodell.main(Sandhaufenmodell.java:29)
Wie kann ich das umgehen?
Was muss ich umändern, um auch mit einem array, der nur 1*1 groß ist, ein erebnis zu erziehlen??
Weiters würde ich gerne in Exel ein Funktion erstellen, bei welcher die x-Achse Die Zeit und die y-Achse die dazu gehörige Menge der gesamten "Sandkörner" auf dem Gitter(array) darstellt, wie kann ich das bewerkstelligen?
Danke für die Hilfe!
Ich habe ein kleines Sandhaufenmodell geschrieben, aber es funktioniert nicht ganz wie es sollte:
Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Sandhaufenmodell {
static int sizeX,sizeY,maxGrains,numberOfGrains,toNumber,yfall,zfall;
static int array[][];
static int time=0;
static int x = 10;
public static void main(String[] args) throws NumberFormatException, IOException
{
// TODO Auto-generated method stub
BufferedReader dIn = new BufferedReader(
new InputStreamReader(System.in));
System.out.println("Bitte geben Sie Breite und Höhe ein:");
sizeX = Integer.parseInt(dIn.readLine());
sizeY = Integer.parseInt(dIn.readLine());
System.out.println("Bitte geben Sie das max. Fassungsvermögen einer Zelle ein ");
maxGrains = Integer.parseInt(dIn.readLine());
System.out.println("Wieviele Sandkörner wollen sie max. auf einmal eingeben? ");
toNumber = Integer.parseInt(dIn.readLine());
sandHaufenmodell();
for (int i=0; i<100; i++){//100 mal Schleife
kornPlazierung();
verteilung();
ausgabe();
}
}
private static void sandHaufenmodell() {
array = new int[sizeX][sizeY];
}
private static void kornPlazierung() {
numberOfGrains = (int) (Math.random() * (toNumber)+1);
yfall= (int) (Math.random() * (sizeX));
zfall= (int) (Math.random() * (sizeY));
for (int i=0; i<1; i++){//100 mal Schleife
array[yfall][zfall] = array[yfall][zfall]+numberOfGrains;}
}
private static void ausgabe() {
for (int i = 0; i < x; i++) {
for (int j = 0; j < x; j++) {
System.out.print(array[i][j] + "+");
}
System.out.println();
}
System.out.println("Zum Zeitpunkt: " + time + "n");
time++;
}
private static void verteilung() {
boolean aenderung = true;
while (aenderung) {
aenderung = false;
for (int i = 0; i < x; i++) {
for (int j = 0; j < x; j++) {
if (array[i][j] > 3) {
array[i][j] -= 3;
aenderung = true;
if ((j - 1) >= 0) {
array[i][j - 1]++;
}
if ((j + 1) < x) {
array[i][j + 1]++;
}
if ((i + 1) < x) {
array[i + 1][j]++;
}
System.out.println("Sandkörner auf: " + (i + 1) + ", "
+ (j + 1) + " wurden instabil!");
}
}
}
}
}
}
Was ist falsch daran?
Wenn ich bei der Aufforderung zur Zahleneingab immer 1 drücke, kommt folgende Fehlermeldung :
Bitte geben Sie Breite und Höhe ein:
1
1
Bitte geben Sie das max. Fassungsvermögen einer Zelle ein
1
Wieviele Sandkörner wollen sie max. auf einmal eingeben?
1
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at Sandhaufenmodell.verteilung(Sandhaufenmodell.java:62)
at Sandhaufenmodell.main(Sandhaufenmodell.java:29)
Wie kann ich das umgehen?
Was muss ich umändern, um auch mit einem array, der nur 1*1 groß ist, ein erebnis zu erziehlen??
Weiters würde ich gerne in Exel ein Funktion erstellen, bei welcher die x-Achse Die Zeit und die y-Achse die dazu gehörige Menge der gesamten "Sandkörner" auf dem Gitter(array) darstellt, wie kann ich das bewerkstelligen?
Danke für die Hilfe!