L
Lirave
Gast
Hallo, dies sind meine ersten Versuche mit Java.
Ich arbeite mit dem Tool eclipse.
Und habe mir dort eine Klasse Guillotine mit main() Funktion erstellt, und eine Klasse Funktionen, die einige Funktionen enthält.
Und eine weitere Klasse Stein, welches ein Bauteil repräsentiert.
Guillotine.java
Stein.java
und zu guterletzt noch Funktionen.java
In der Guillotine.java werden zuerst 2 Werte eingelesen, die Anzahl der zu erstellenden Steine, und ob man sie um 90° drehen können soll.
Danach werden entsprechend viele Steine erstellt, und zu beginn in den beiden LinkedLists Teile_alt und Teile_neu gespeichert.
Nun werden alle Teile miteinander kombiniert und die neu entstandenen Teile werden in einer weiteren LinkedList Teile_neu_neu gespeichert.
Soweit so gut.
Nun möchte ich für die weiteren Durchgänge die LinkedListen neu "anordnen".
Und zwar soll im nächsten Schritt in der Liste Teile_alt drin stehen alle werte aus Teile_alt und die aus Teile_neu_neu.
Teile_neu_neu soll jetzt umkopiert werden, so dass diese Werte nun in der Liste Teile_neu zufinden sind (alle Teile aus Teile_neu sind gelöscht). Und am Schluss soll noch Teile_neu_neu geleert werden.
Ich dachte auch, dass ich dies so oben in dem Script getan habe, doch leider klappt es nicht ganz.
Denn entweder ich bekomme eine exeption, wegen zuwenig Speicher, oder es wird alles gelöscht.
Hoffe ihr versteht, was mein Problem ist und könnt mir schnell helfen.
Mit freundlichen Grüßen
Robert
Ich arbeite mit dem Tool eclipse.
Und habe mir dort eine Klasse Guillotine mit main() Funktion erstellt, und eine Klasse Funktionen, die einige Funktionen enthält.
Und eine weitere Klasse Stein, welches ein Bauteil repräsentiert.
Guillotine.java
Java:
import java.io.*;
import java.util.LinkedList;
public class Guillotine {
/**
* @param args
*/
public static void main(String[] args) {
int drehen = 0;
int anzahl = 0;
//Eingabe
BufferedReader ar = new BufferedReader(new InputStreamReader(System.in));
try{
System.out.println("Anzahl der Steine eingeben: ");
anzahl = Integer.parseInt(ar.readLine());
}catch(IOException ioe){
ioe.printStackTrace();
}catch(NumberFormatException nfe){
nfe.printStackTrace();
}
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try{
System.out.println("Soll das drehen um 90° möglich sein? [0/1]: ");
drehen = Integer.parseInt(br.readLine());
}catch(IOException ioe){
ioe.printStackTrace();
}catch(NumberFormatException nfe){
nfe.printStackTrace();
}
//
// Steine werden erstellt und in Liste gespeichert, und eventuell gedreht hinzugefügt
LinkedList<Stein> Steine = new LinkedList<Stein>();
for(int i=1; i<=anzahl; i++){
int[] num = Funktionen.erstelle(i,anzahl);
int random1= (int)(Math.ceil(10*Math.random()));
int random2= (int)(Math.ceil(10*Math.random()));
Steine.addLast(new Stein(random1,random2,num,"n"+String.valueOf(i)));
if (random1 != random2 && drehen == 1) {
Steine.addLast(new Stein(random2,random1,num,"d"+String.valueOf(i)));
}
}
//LinkedList<LinkedList<Stein>> Teile= new LinkedList<LinkedList<Stein>>();
//
LinkedList<Stein> Teile_alt = Steine; //alle bisherigen Teile
LinkedList<Stein> Teile_neu = Steine; //alle im letzten Schritt hinzugekommenne Teile
LinkedList<Stein> Teile_neu_neu = new LinkedList<Stein>(); //alle in diesem Schritt hinzukommenden Teile
Stein Teil_neu;
Stein Teil_alt;
Stein Teil_neu_neu;
// kombinert alle neuen Teile mit den bisher erzeugten Teilen
for(int z=1; z < anzahl ;z++){
for(int i=0; i<Teile_neu.size(); i++){
Teil_neu = Teile_neu.get(i);
for(int j=0; j<Teile_alt.size(); j++){
Teil_alt = Teile_alt.get(j);
if (Funktionen.disjunkt(Teil_alt.getNummer(),Teil_neu.getNummer())){ //wenn beide Teile disjunkte Steine enthält, dann verbinde sie
Teil_neu_neu = Funktionen.verbindehorizontal(Teil_alt,Teil_neu);
Teile_neu_neu.addLast(Teil_neu_neu);
Teil_neu_neu = Funktionen.verbindevertikal(Teil_alt,Teil_neu);
Teile_neu_neu.addLast(Teil_neu_neu);
}
}
}
Teile_alt = Funktionen.listenverbinden( Teile_alt ,Teile_neu_neu);
Teile_neu = Funktionen.listenersetzen(Teile_neu, Teile_neu_neu);
Teile_neu_neu.clear();
}
//Ausgabe von Teile_neu_neu
System.out.println(Teile_alt.size());
for(int i=0; i<Teile_alt.size(); i++){
System.out.println("Stein"+(i+1)+" ("+Teile_alt.get(i).getId()+") : "+ Teile_alt.get(i).getNummer());
}
//
}
}
Stein.java
Java:
public class Stein {
private int hoehe;
private int breite;
private int[] nummer;
private String id;
public Stein(int h, int b, int[] n,String c) {
this.hoehe = h;
this.breite = b;
this.nummer = n;
this.id = c;
}
public void setHoehe(int h) {
this.hoehe = h;
}
public void setBreite(int b) {
this.breite = b;
}
public void setNumber(int[] n) {
this.nummer = n;
}
public void setId(String c) {
this.id = c;
}
public int getHoehe() {
return hoehe;
}
public int getBreite() {
return breite;
}
public int[] getNummer() {
return nummer;
}
public String getId() {
return id;
}
public void disp() {
System.out.print("Höhe: "+this.hoehe+" Breite: "+this.breite+" Steine: ");
for(int i=0;i<this.nummer.length;i++){
System.out.print(this.nummer[i]+" ");
}
System.out.println();
}
}
und zu guterletzt noch Funktionen.java
Java:
import java.util.LinkedList;
public class Funktionen {
public static Stein verbindehorizontal(Stein s1, Stein s2) {
return new Stein(Math.max(s1.getHoehe(), s2.getHoehe()),s1.getBreite() + s2.getBreite(), add(s1.getNummer(), s2.getNummer()),"("+s1.getId()+"h"+s2.getId()+")");
}
public static Stein verbindevertikal(Stein s1, Stein s2) {
return new Stein(s1.getHoehe() + s2.getHoehe(),Math.max(s1.getBreite(), s2.getBreite()), add(s1.getNummer(), s2.getNummer()),"("+s1.getId()+"v"+s2.getId()+")");
}
public static LinkedList<Stein> listenverbinden( LinkedList<Stein> Liste1 ,LinkedList<Stein> Liste2) {
for(int i = 0; i<Liste2.size(); i++ ) {
Liste1.addLast(Liste2.get(i));
}
return Liste1;
}
public static LinkedList<Stein> listenersetzen( LinkedList<Stein> Liste1, LinkedList<Stein> Liste2) {
Liste1.clear();
for(int i = 0; i<Liste2.size(); i++ ) {
Liste1.addLast(Liste2.get(i));
}
return Liste1;
}
public static int[] erstelle(int i , int anzahl){
int[] nummer = new int[anzahl];
for(int j = 0; j< anzahl; j++){
if (i == (j+1)){
nummer[j] =1;
}else{
nummer[j] =0;
}
}
return nummer;
}
public static boolean disjunkt(int[] teile1, int[] teile2){
for (int i = 0; i < teile1.length; i++){
if (teile1[i] == 1 && teile2[i]==1){
return false;
}
}
return true;
}
public static int[] add(int[] i, int[] j){
int[] nummer = new int[i.length];
for (int k = 0; k< i.length; k++){
nummer[k] = i[k] + j[k];
}
return nummer;
}
}
In der Guillotine.java werden zuerst 2 Werte eingelesen, die Anzahl der zu erstellenden Steine, und ob man sie um 90° drehen können soll.
Danach werden entsprechend viele Steine erstellt, und zu beginn in den beiden LinkedLists Teile_alt und Teile_neu gespeichert.
Nun werden alle Teile miteinander kombiniert und die neu entstandenen Teile werden in einer weiteren LinkedList Teile_neu_neu gespeichert.
Soweit so gut.
Nun möchte ich für die weiteren Durchgänge die LinkedListen neu "anordnen".
Und zwar soll im nächsten Schritt in der Liste Teile_alt drin stehen alle werte aus Teile_alt und die aus Teile_neu_neu.
Teile_neu_neu soll jetzt umkopiert werden, so dass diese Werte nun in der Liste Teile_neu zufinden sind (alle Teile aus Teile_neu sind gelöscht). Und am Schluss soll noch Teile_neu_neu geleert werden.
Ich dachte auch, dass ich dies so oben in dem Script getan habe, doch leider klappt es nicht ganz.
Denn entweder ich bekomme eine exeption, wegen zuwenig Speicher, oder es wird alles gelöscht.
Hoffe ihr versteht, was mein Problem ist und könnt mir schnell helfen.
Mit freundlichen Grüßen
Robert