Hallo miteinander,
bin neu hier und auch recht neu im Thema Java zwecks Uni. Sitze nun an einer Hausaufgabe und stehe momentan vor einigen Schwierigkeiten:
1.: Ich möchte über einen Scanner Input insgesamt drei verschiedene Objekte erzeugen können, dies sieht man in der Main-Klasse bei den Switches unter 1. 1-3.
Das funktioniert für das Objekt "Rund" auch ohne Probleme, allerdings für die Objekte "Rechteckig" und "Quadratisch" nicht. Also es werden schon die verschiedenen Parameter gespeichert, nur können sie aus irgendeinem Grund später in weiteren Berechnungen nicht verwendet werden: genauer gesagt geht es um die Methode getGewicht(), diese funktioniert in der Klasse Rund ohne Probleme und bei Rechteckig und Quadratisch bekomme ich als Ergebnis immer 0.0. Vielleicht sieht ja jemand den Fehler und ich einfach nur den Wald vor Lauter Bäumen nicht...
2.: Ich möchte außerdem für die Klasse Stapel die toString Methode anwenden, diese gibt mir aber keinerlei Konsolenoutput, könnt ihr mir da vielleicht sagen woran es liegen könnte?
Hier einmal der Code für die Main-Klasse, und die jeweiligen Klassen Rund, Rechteckig, Quadratisch und das zugehörige Interface, außerdem die Klasse Stapel:
[CODE lang="java" title="Main"]public class Main {
static ArrayList<ISpielstein> haufen = new ArrayList<ISpielstein>();
static Stapel spielStapel = new Stapel("Nummer Eins", 350);
public static void main(String[] args) {
spielen(haufen);
}
private static void spielen(List<ISpielstein> stapel) {
Scanner scanner = new Scanner(System.in);
boolean quit = false;
int anzahlElemente = 0;
printMenu();
while(!quit) {
int action = scanner.nextInt();
scanner.nextLine();
switch(action) {
case 0:
printMenu();
break;
case 1:
System.out.println("Was für ein Spielstein soll erstellt werden:\n"+
"1 - runder Spielstein,\n" +
"2 - rechteckiger Spielstein oder\n" +
"3 - quadratischer Spielstein?\n" +
"4 - Untermenue verlassen.\n" +
"Bestaetigen sie die Eingabe mit Enter.");
int wahl = scanner.nextInt();
scanner.nextLine();
switch(wahl) {
case 1:
Rund rund = new Rund(0, null);
System.out.println("Vergeben sie eine Nummer fuer den zu erstellenden Spielstein und bestaetigen sie die Eingabe mit Enter:");
rund.setNummer(scanner.next());
System.out.println("Geben sie den Radius in [m] des zu erstellenden Spielsteins ein und bestaetigen sie mit Enter:");
rund.setRadius(scanner.nextDouble());
System.out.println("Runder Spielstein wurde erstellt.");
haufen.add(rund);
break;
case 2:
Rechteckig rechteckig = new Rechteckig(0, 0, null);
System.out.println("Vergeben sie eine Nummer fuer den zu erstellenden Spielstein und bestaetigen sie die Eingabe mit Enter:");
rechteckig.setNummer(scanner.next());
System.out.println("Geben sie die Laenge in [m] des zu erstellenden Spielsteins ein und bestaetigen sie mit Enter:");
double laenge = scanner.nextDouble();
rechteckig.setLaenge(laenge);
System.out.println("Geben sie die Breite in [m] des zu erstellenden Spielsteins ein und bestaetigen sie mit Enter:");
double breite = scanner.nextDouble();
rechteckig.setLaenge(breite);
System.out.println(rechteckig.getGewicht());
System.out.println("Rechteckiger Spielstein wurde erstellt.");
haufen.add(rechteckig);
break;
case 3:
Quadratisch quadratisch = new Quadratisch(null, 0);
System.out.println("Vergeben sie eine Nummer fuer den zu erstellenden Spielstein und bestaetigen sie die Eingabe mit Enter:");
quadratisch.setNummer(scanner.next());
System.out.println("Geben sie die Kantenlaenge des zu erstellenden Spielsteins ein und bestaetigen sie mit Enter:");
quadratisch.setLaenge(scanner.nextDouble());
System.out.println("Quadratischer Spielstein wurde erstellt.");
haufen.add(quadratisch);
break;
}
break;
case 2:
if(haufen.size() == 0) {
System.out.println("Keine Spielsteine verfügbar. Erstellen Sie welche!");
} else {
System.out.println("Verfuegbare Spielsteine:\n");
for(int i = 0; i < haufen.size(); i++) {
System.out.println(haufen.get(i).toString());
}
}
break;
case 3:
System.out.println("Welchen Stein (Nummer) aus dem Haufen moechten sie hinzufuegen? Bestaetigen sie Ihre Eingabe mit Enter.");
String gesuchterStein = scanner.next();
if(findeSpielstein(gesuchterStein) == null) {
System.out.println("Der gesuchte Stein existiert nicht.");
} else {
ISpielstein steinZumAuflegen = findeSpielstein(gesuchterStein);
if((spielStapel.berechneStapelgewicht() + steinZumAuflegen.getGewicht() <= spielStapel.getMaxGewicht())) {
spielStapel.steinAuflegen(steinZumAuflegen);
anzahlElemente++;
}
spielStapel.toString();
}
break;
case 4:
if(anzahlElemente > 0) {
if(spielStapel.steinAbnehmen()) {
anzahlElemente --;
System.out.println("Oberster Stein wurde entfernt.");
}
spielStapel.toString();
} else {
System.out.println("Es liegt kein Stein mehr auf dem Stapel.");
}
break;
case 5:
if(anzahlElemente == 0) {
System.out.println("Es befinden sich keine Spielsteine auf dem Stapel.");
}
spielStapel.toString();
break;
case 6:
System.out.println("");
quit = true;
break;
}
}
}
private static void printMenu() {
System.out.println("Mögliche Optionen:\n");
System.out.println("0 - um das Menue anzuzeigen,\n" +
"1 - Spielstein erstellen,\n" +
"2 - Verfuegbare Spielsteine anzeigen,\n" +
"3 - Spielstein oben auf Stapel hinzufuegen,\n"+
"4 - Obersten Spielstein vom Stapel entfernen,\n"+
"5 - Stapel anzeigen,\n"+
"6 - um das Programm zu beenden (alle Daten gehen verloren).");
}
private static ISpielstein findeSpielstein(String nummer) {
for(ISpielstein gesuchterStein: haufen) {
if(gesuchterStein.getNummer().equals(nummer)) {
return gesuchterStein;
}
}
return null;
}
}
[/CODE]
[CODE lang="java" title="Interface"]public interface ISpielstein {
public final double DICHTE = 500;
public final double HOEHE = 0.05;
public String getNummer();
public String getForm();
public double getGewicht();
public String toString();
}
[/CODE]
[CODE lang="java" title="Rund"]public class Rund implements ISpielstein {
private double radius;
private double gewicht;
private String form = "Zylinder";
private String nummer;
public Rund(double radius, String nummer) {
this.radius = radius;
this.nummer = nummer;
}
public void setRadius(double radius) {
this.radius = radius;
}
@Override
public String getNummer() {
return nummer;
}
public void setNummer(String nummer) {
this.nummer = nummer;
}
@Override
public String getForm() {
return form;
}
@Override
public double getGewicht() {
return gewicht = Math.PI * radius * radius * HOEHE * DICHTE;
}
@Override
public String toString() {
return "Nummer: " + nummer + ", Form: " + form + ", Gewicht: " + getGewicht() + "kg";
}
}[/CODE]
[CODE lang="java" title="Rechteckig"]public class Rechteckig implements ISpielstein{
private double laenge;
private double breite;
private double gewicht;
private String nummer;
private String form = "Quader";
public Rechteckig(double laenge, double breite, String nummer) {
this.laenge = laenge;
this.breite = breite;
this.nummer = nummer;
}
public void setLaenge(double laenge) {
this.laenge = laenge;
}
public void setBreite(double breite) {
this.breite = breite;
}
@Override
public String getNummer() {
return nummer;
}
public void setNummer(String nummer) {
this.nummer = nummer;
}
@Override
public String getForm() {
return form;
}
@Override
public double getGewicht() {
return gewicht = breite * laenge * HOEHE * DICHTE;
}
@Override
public String toString() {
return "Nummer: " + nummer + ", Form: " + form + ", Gewicht: " + getGewicht() + "kg";
}
}[/CODE]
[CODE lang="java" title="Quadratisch"]public class Quadratisch implements ISpielstein {
private double laenge;
private double breite = laenge;
private double gewicht;
private String nummer;
private String form = "Quadratisch";
public Quadratisch(String nummer, double laenge) {
this.nummer = nummer;
this.laenge = laenge;
}
public void setLaenge(double laenge) {
this.laenge = laenge;
}
@Override
public String getNummer() {
return nummer;
}
public void setNummer(String nummer) {
this.nummer = nummer;
}
@Override
public String getForm() {
return form;
}
@Override
public double getGewicht() {
return gewicht = HOEHE * breite * laenge * DICHTE;
}
@Override
public String toString() {
return "Nummer: " + nummer + ", Form: " + form + ", Gewicht: " + getGewicht() + "kg";
}
}[/CODE]
[CODE lang="java" title="Stapel"]public class Stapel {
private String stapelName;
private LinkedList<ISpielstein> spielsteine;
private double maxGewicht;
private double stapelGewicht;
public Stapel(String stapelName, double maxGewicht) {
this.stapelName = stapelName;
this.maxGewicht = maxGewicht;
this.spielsteine = new LinkedList<ISpielstein>();
}
public boolean steinAuflegen(ISpielstein spielstein) {
double gesamtGewicht = berechneStapelgewicht();
spielsteine.add(spielstein);
System.out.println("Stein wurde oben aufgelegt.");
return true;
}
public boolean steinAbnehmen() {
ISpielstein letzterStein = spielsteine.getLast();
int indexLetzterStein = spielsteine.indexOf(letzterStein);
if(indexLetzterStein >= 0) {
spielsteine.remove(indexLetzterStein);
System.out.println("Oberster Spielstein wurde entfernt." );
return true;
} else {
System.out.println("Es befinden sich keine Steine auf dem Stapel, die entfernt werden koennen.");
return false;
}
}
public double berechneStapelgewicht() {
if(spielsteine.size() >= 0) {
for(int i = 0; i < spielsteine.size(); i++) {
stapelGewicht += spielsteine.get(i).getGewicht();
}
}
return stapelGewicht;
}
public ISpielstein findeSpielstein(String nummer) {
for(ISpielstein gesuchterStein: this.spielsteine) {
if(gesuchterStein.getNummer().equals(nummer)) {
return gesuchterStein;
}
}
return null;
}
public double getMaxGewicht() {
return maxGewicht;
}
@Override
public String toString() {
return "Stapel [stapelName=" + stapelName + ", spielsteine=" + spielsteine + ", maxGewicht=" + maxGewicht
+ ", stapelGewicht=" + stapelGewicht + "]";
}
}[/CODE]
bin neu hier und auch recht neu im Thema Java zwecks Uni. Sitze nun an einer Hausaufgabe und stehe momentan vor einigen Schwierigkeiten:
1.: Ich möchte über einen Scanner Input insgesamt drei verschiedene Objekte erzeugen können, dies sieht man in der Main-Klasse bei den Switches unter 1. 1-3.
Das funktioniert für das Objekt "Rund" auch ohne Probleme, allerdings für die Objekte "Rechteckig" und "Quadratisch" nicht. Also es werden schon die verschiedenen Parameter gespeichert, nur können sie aus irgendeinem Grund später in weiteren Berechnungen nicht verwendet werden: genauer gesagt geht es um die Methode getGewicht(), diese funktioniert in der Klasse Rund ohne Probleme und bei Rechteckig und Quadratisch bekomme ich als Ergebnis immer 0.0. Vielleicht sieht ja jemand den Fehler und ich einfach nur den Wald vor Lauter Bäumen nicht...
2.: Ich möchte außerdem für die Klasse Stapel die toString Methode anwenden, diese gibt mir aber keinerlei Konsolenoutput, könnt ihr mir da vielleicht sagen woran es liegen könnte?
Hier einmal der Code für die Main-Klasse, und die jeweiligen Klassen Rund, Rechteckig, Quadratisch und das zugehörige Interface, außerdem die Klasse Stapel:
[CODE lang="java" title="Main"]public class Main {
static ArrayList<ISpielstein> haufen = new ArrayList<ISpielstein>();
static Stapel spielStapel = new Stapel("Nummer Eins", 350);
public static void main(String[] args) {
spielen(haufen);
}
private static void spielen(List<ISpielstein> stapel) {
Scanner scanner = new Scanner(System.in);
boolean quit = false;
int anzahlElemente = 0;
printMenu();
while(!quit) {
int action = scanner.nextInt();
scanner.nextLine();
switch(action) {
case 0:
printMenu();
break;
case 1:
System.out.println("Was für ein Spielstein soll erstellt werden:\n"+
"1 - runder Spielstein,\n" +
"2 - rechteckiger Spielstein oder\n" +
"3 - quadratischer Spielstein?\n" +
"4 - Untermenue verlassen.\n" +
"Bestaetigen sie die Eingabe mit Enter.");
int wahl = scanner.nextInt();
scanner.nextLine();
switch(wahl) {
case 1:
Rund rund = new Rund(0, null);
System.out.println("Vergeben sie eine Nummer fuer den zu erstellenden Spielstein und bestaetigen sie die Eingabe mit Enter:");
rund.setNummer(scanner.next());
System.out.println("Geben sie den Radius in [m] des zu erstellenden Spielsteins ein und bestaetigen sie mit Enter:");
rund.setRadius(scanner.nextDouble());
System.out.println("Runder Spielstein wurde erstellt.");
haufen.add(rund);
break;
case 2:
Rechteckig rechteckig = new Rechteckig(0, 0, null);
System.out.println("Vergeben sie eine Nummer fuer den zu erstellenden Spielstein und bestaetigen sie die Eingabe mit Enter:");
rechteckig.setNummer(scanner.next());
System.out.println("Geben sie die Laenge in [m] des zu erstellenden Spielsteins ein und bestaetigen sie mit Enter:");
double laenge = scanner.nextDouble();
rechteckig.setLaenge(laenge);
System.out.println("Geben sie die Breite in [m] des zu erstellenden Spielsteins ein und bestaetigen sie mit Enter:");
double breite = scanner.nextDouble();
rechteckig.setLaenge(breite);
System.out.println(rechteckig.getGewicht());
System.out.println("Rechteckiger Spielstein wurde erstellt.");
haufen.add(rechteckig);
break;
case 3:
Quadratisch quadratisch = new Quadratisch(null, 0);
System.out.println("Vergeben sie eine Nummer fuer den zu erstellenden Spielstein und bestaetigen sie die Eingabe mit Enter:");
quadratisch.setNummer(scanner.next());
System.out.println("Geben sie die Kantenlaenge des zu erstellenden Spielsteins ein und bestaetigen sie mit Enter:");
quadratisch.setLaenge(scanner.nextDouble());
System.out.println("Quadratischer Spielstein wurde erstellt.");
haufen.add(quadratisch);
break;
}
break;
case 2:
if(haufen.size() == 0) {
System.out.println("Keine Spielsteine verfügbar. Erstellen Sie welche!");
} else {
System.out.println("Verfuegbare Spielsteine:\n");
for(int i = 0; i < haufen.size(); i++) {
System.out.println(haufen.get(i).toString());
}
}
break;
case 3:
System.out.println("Welchen Stein (Nummer) aus dem Haufen moechten sie hinzufuegen? Bestaetigen sie Ihre Eingabe mit Enter.");
String gesuchterStein = scanner.next();
if(findeSpielstein(gesuchterStein) == null) {
System.out.println("Der gesuchte Stein existiert nicht.");
} else {
ISpielstein steinZumAuflegen = findeSpielstein(gesuchterStein);
if((spielStapel.berechneStapelgewicht() + steinZumAuflegen.getGewicht() <= spielStapel.getMaxGewicht())) {
spielStapel.steinAuflegen(steinZumAuflegen);
anzahlElemente++;
}
spielStapel.toString();
}
break;
case 4:
if(anzahlElemente > 0) {
if(spielStapel.steinAbnehmen()) {
anzahlElemente --;
System.out.println("Oberster Stein wurde entfernt.");
}
spielStapel.toString();
} else {
System.out.println("Es liegt kein Stein mehr auf dem Stapel.");
}
break;
case 5:
if(anzahlElemente == 0) {
System.out.println("Es befinden sich keine Spielsteine auf dem Stapel.");
}
spielStapel.toString();
break;
case 6:
System.out.println("");
quit = true;
break;
}
}
}
private static void printMenu() {
System.out.println("Mögliche Optionen:\n");
System.out.println("0 - um das Menue anzuzeigen,\n" +
"1 - Spielstein erstellen,\n" +
"2 - Verfuegbare Spielsteine anzeigen,\n" +
"3 - Spielstein oben auf Stapel hinzufuegen,\n"+
"4 - Obersten Spielstein vom Stapel entfernen,\n"+
"5 - Stapel anzeigen,\n"+
"6 - um das Programm zu beenden (alle Daten gehen verloren).");
}
private static ISpielstein findeSpielstein(String nummer) {
for(ISpielstein gesuchterStein: haufen) {
if(gesuchterStein.getNummer().equals(nummer)) {
return gesuchterStein;
}
}
return null;
}
}
[/CODE]
[CODE lang="java" title="Interface"]public interface ISpielstein {
public final double DICHTE = 500;
public final double HOEHE = 0.05;
public String getNummer();
public String getForm();
public double getGewicht();
public String toString();
}
[/CODE]
[CODE lang="java" title="Rund"]public class Rund implements ISpielstein {
private double radius;
private double gewicht;
private String form = "Zylinder";
private String nummer;
public Rund(double radius, String nummer) {
this.radius = radius;
this.nummer = nummer;
}
public void setRadius(double radius) {
this.radius = radius;
}
@Override
public String getNummer() {
return nummer;
}
public void setNummer(String nummer) {
this.nummer = nummer;
}
@Override
public String getForm() {
return form;
}
@Override
public double getGewicht() {
return gewicht = Math.PI * radius * radius * HOEHE * DICHTE;
}
@Override
public String toString() {
return "Nummer: " + nummer + ", Form: " + form + ", Gewicht: " + getGewicht() + "kg";
}
}[/CODE]
[CODE lang="java" title="Rechteckig"]public class Rechteckig implements ISpielstein{
private double laenge;
private double breite;
private double gewicht;
private String nummer;
private String form = "Quader";
public Rechteckig(double laenge, double breite, String nummer) {
this.laenge = laenge;
this.breite = breite;
this.nummer = nummer;
}
public void setLaenge(double laenge) {
this.laenge = laenge;
}
public void setBreite(double breite) {
this.breite = breite;
}
@Override
public String getNummer() {
return nummer;
}
public void setNummer(String nummer) {
this.nummer = nummer;
}
@Override
public String getForm() {
return form;
}
@Override
public double getGewicht() {
return gewicht = breite * laenge * HOEHE * DICHTE;
}
@Override
public String toString() {
return "Nummer: " + nummer + ", Form: " + form + ", Gewicht: " + getGewicht() + "kg";
}
}[/CODE]
[CODE lang="java" title="Quadratisch"]public class Quadratisch implements ISpielstein {
private double laenge;
private double breite = laenge;
private double gewicht;
private String nummer;
private String form = "Quadratisch";
public Quadratisch(String nummer, double laenge) {
this.nummer = nummer;
this.laenge = laenge;
}
public void setLaenge(double laenge) {
this.laenge = laenge;
}
@Override
public String getNummer() {
return nummer;
}
public void setNummer(String nummer) {
this.nummer = nummer;
}
@Override
public String getForm() {
return form;
}
@Override
public double getGewicht() {
return gewicht = HOEHE * breite * laenge * DICHTE;
}
@Override
public String toString() {
return "Nummer: " + nummer + ", Form: " + form + ", Gewicht: " + getGewicht() + "kg";
}
}[/CODE]
[CODE lang="java" title="Stapel"]public class Stapel {
private String stapelName;
private LinkedList<ISpielstein> spielsteine;
private double maxGewicht;
private double stapelGewicht;
public Stapel(String stapelName, double maxGewicht) {
this.stapelName = stapelName;
this.maxGewicht = maxGewicht;
this.spielsteine = new LinkedList<ISpielstein>();
}
public boolean steinAuflegen(ISpielstein spielstein) {
double gesamtGewicht = berechneStapelgewicht();
spielsteine.add(spielstein);
System.out.println("Stein wurde oben aufgelegt.");
return true;
}
public boolean steinAbnehmen() {
ISpielstein letzterStein = spielsteine.getLast();
int indexLetzterStein = spielsteine.indexOf(letzterStein);
if(indexLetzterStein >= 0) {
spielsteine.remove(indexLetzterStein);
System.out.println("Oberster Spielstein wurde entfernt." );
return true;
} else {
System.out.println("Es befinden sich keine Steine auf dem Stapel, die entfernt werden koennen.");
return false;
}
}
public double berechneStapelgewicht() {
if(spielsteine.size() >= 0) {
for(int i = 0; i < spielsteine.size(); i++) {
stapelGewicht += spielsteine.get(i).getGewicht();
}
}
return stapelGewicht;
}
public ISpielstein findeSpielstein(String nummer) {
for(ISpielstein gesuchterStein: this.spielsteine) {
if(gesuchterStein.getNummer().equals(nummer)) {
return gesuchterStein;
}
}
return null;
}
public double getMaxGewicht() {
return maxGewicht;
}
@Override
public String toString() {
return "Stapel [stapelName=" + stapelName + ", spielsteine=" + spielsteine + ", maxGewicht=" + maxGewicht
+ ", stapelGewicht=" + stapelGewicht + "]";
}
}[/CODE]