Ich soll für ein Programmierungspraktikum innerhalb des Studium einen Briefmarkenautomaten in Java (in eclipse) programmieren, komme aber schlichtweg nicht weiter. Kann mir hier jemand weiterhelfen ?
Quellcode (Sendungstyp.java):
Quellcode (BriefmarkenAutomat.java):
Als Fehler erhalte ich:
Cannot make a static reference to the non-static method Sendungsdetails() from the type BriefmarkenAutomat
Cannot make a static reference to the non-static method Muenzeinwurf() from the type BriefmarkenAutomat
Cannot make a static reference to the non-static method Output() from the type BriefmarkenAutomat
Als erstes soll der Sendungstyp über Höhe und Gewicht und dann das Gesamtporto (Anzahl der gewünschten Marken * Einzelporto), anschließend kann Geld eingeworfen werden.
Vielen Dank und Gruß Jan
Quellcode (Sendungstyp.java):
Java:
public class Sendungstyp {
//Attribute
double maxHoehe;
int maxGewicht;
double porto;
String bezeichnung;
//Konstruktor
public Sendungstyp(double maxHoehe, int maxGewicht, double porto, String bezeichnung) {
this.maxHoehe = maxHoehe;
this.maxGewicht = maxGewicht;
this.porto = porto;
this.bezeichnung = bezeichnung;
}
//get-Methoden
double getMaxHoehe() {
return maxHoehe;
}
int getMaxGewicht() {
return maxGewicht;
}
double getPorto() {
return porto;
}
String getBezeichnung() {
return bezeichnung;
}
//set-Methoden
void setMaxHoehe(double hoehe) {
this.maxHoehe = hoehe;
}
void setMaxGewicht(int maxGewicht)
{
this.maxGewicht = maxGewicht;
}
void setPorto(double porto) {
this.porto = porto;
}
void setBezeichnung(String bezeichnung) {
this.bezeichnung = bezeichnung;
}
final static Sendungstyp[] Sendungstyp = {
new Sendungstyp(0,0,0.45,"Postkarte"),
new Sendungstyp(0.5,20,0.70,"Standardbrief"),
new Sendungstyp(1.0,50,0.85,"Kompaktbrief"),
new Sendungstyp(2.0,500,1.45,"Großbrief"),
new Sendungstyp(5.0,1000,2.40,"Maxibrief")
};
public static Sendungstyp typ(int gewicht, double hoehe) {
if (hoehe == 0)
return Sendungstyp[0];
if (gewicht<=Sendungstyp[1].getMaxGewicht() && hoehe >0 && hoehe <= Sendungstyp[1].getMaxHoehe() )
return Sendungstyp[1];
if ((gewicht>Sendungstyp[1].getMaxGewicht() && gewicht<=Sendungstyp[2].getMaxGewicht() && hoehe <= Sendungstyp[2].getMaxHoehe() )||( hoehe > Sendungstyp[1].getMaxHoehe() && hoehe <= Sendungstyp[2].getMaxHoehe() && gewicht <= Sendungstyp[2].getMaxGewicht() ) )
return Sendungstyp[2];
if ((gewicht>Sendungstyp[2].getMaxGewicht() && gewicht<=Sendungstyp[3].getMaxGewicht() && hoehe <= Sendungstyp[3].getMaxHoehe() )|| ( hoehe > Sendungstyp[2].getMaxHoehe() && hoehe <= Sendungstyp[3].getMaxHoehe() && gewicht <= Sendungstyp[3].getMaxGewicht() ) )
return Sendungstyp[3];
if ((gewicht>Sendungstyp[3].getMaxGewicht() && gewicht<=Sendungstyp[4].getMaxGewicht() && hoehe <= Sendungstyp[4].getMaxHoehe() )|| ( hoehe > Sendungstyp[3].getMaxHoehe() && hoehe <= Sendungstyp[4].getMaxHoehe() && gewicht <= Sendungstyp[4].getMaxGewicht() ) )
return Sendungstyp[4];
else
System.out.println("ERROR: Bitte ueberpruefen Sie ihre Eingabe");
return null;
}
}
Quellcode (BriefmarkenAutomat.java):
Java:
import java.io.*;
import java.util.*;
import java.text.*;
public class BriefmarkenAutomat {
//Attribute
double hoeheDouble;
int gewichtInt;
double GesamtPorto;
int anzahlInt;
int anzahlMarken;
double restbetrag;
int[] rueckgeld= new int[6];
double einzelPorto = Sendungstyp.typ(gewichtInt,hoeheDouble).getPorto();
//Methode zur Berechnung des Gesamtportos
double getGesamtPorto() {
double GesamtPorto= anzahlInt*einzelPorto;
return GesamtPorto;
}
//Methode zur Auszahlung
int[] auszahlung(double restbetrag) {
this.restbetrag = restbetrag;
double ausgabe=restbetrag*-1;
int[] rueckgeld= new int[6];
while (ausgabe >= 2.0 ) {
ausgabe = ausgabe-2;
rueckgeld[0]=rueckgeld[0]+1;
}
while (ausgabe>=1.0) {
ausgabe = ausgabe-1;
rueckgeld[1]=rueckgeld[1]+1;
}
while (ausgabe>=0.5) {
ausgabe = ausgabe-0.5;
rueckgeld[2]=rueckgeld[2]+1;
}
while (ausgabe>=0.2) {
ausgabe = ausgabe-0.2;
rueckgeld[3]=rueckgeld[3]+1;
}
while (ausgabe>=0.10) {
ausgabe = ausgabe-0.1;
rueckgeld[4]=rueckgeld[4]+1;
}
while (ausgabe>=0.05) {
ausgabe = ausgabe-0.05;
rueckgeld[5]=rueckgeld[5]+1;
}
return rueckgeld;
}
//Ausgabe des Automaten
void Output() {
DecimalFormat df = new DecimalFormat( "###,##0.00" );
if (rueckgeld[0]==0 && rueckgeld[1]==0 && rueckgeld[2]==0 &&rueckgeld[3]==0 && rueckgeld[4]==0 && rueckgeld[5]==0)
System.out.println("Vielen Dank! Auf Wiedersehen!");
else
System.out.println("Sie erhalten: ");
if (rueckgeld[0]>=1) {
System.out.println(rueckgeld[0]+" mal 2 Euro"); }
if (rueckgeld[1]>=1) {
System.out.println(rueckgeld[1]+" mal 1 Euro"); }
if (rueckgeld[2]>=1) {
System.out.println(rueckgeld[2]+" mal 50 Cent"); }
if (rueckgeld[3]>=1) {
System.out.println(rueckgeld[3]+" mal 20 Cent"); }
if (rueckgeld[4]>=1) {
System.out.println(rueckgeld[4]+" mal 10 Cent"); }
if (rueckgeld[5]>=1) {
System.out.println(rueckgeld[5]+" mal 5 Cent"); }
// return restbetrag;
if (restbetrag == 0) {
System.out.println("Vielen Dank!");
}
if (restbetrag<0) {
System.out.println("Rueckgeld: "+df.format(restbetrag*-1)+" €");
}}
//Münzeinwurf
void Muenzeinwurf(){
DecimalFormat df = new DecimalFormat( "###,##0.00" );
while (restbetrag >0) {
System.out.println("zu zahlender Betrag:"+df.format(restbetrag)+" €");
System.out.println("Sie können den Vorgang jederzeit durch Druecken von 'a' abrechen");
System.out.println("Bitte geben Sie die Anzahl der eingeworfenen 2€-Münzen an:");
Scanner sc4 = new Scanner(System.in);
String Euro2 = sc.next();
if (Euro2.equals("a")){
continue;
}
int Euro2int = Integer.parseInt(Euro2);
System.out.println("Sie können den Vorgang jederzeit durch Druecken von 'a' abrechen");
System.out.println("Bitte geben Sie die Anzahl der eingeworfenen 1€-Münzen an:");
Scanner sc5= new Scanner(System.in);
String Euro1 = sc.next();
if (Euro1.equals("a")){
continue;
}
int Euro1int = Integer.parseInt(Euro1);
System.out.println("Sie können den Vorgang jederzeit durch Druecken von 'a' abrechen");
System.out.println("Bitte geben Sie die Anzahl der eingeworfenen 0,50€-Münzen an:");
Scanner sc6 = new Scanner(System.in);
String Cent50 = sc.next();
if (Cent50.equals("a")){
continue;
}
int Cent50int = Integer.parseInt(Cent50);
System.out.println("Sie können den Vorgang jederzeit durch Druecken von 'a' abrechen");
System.out.println("Bitte geben Sie die Anzahl der eingeworfenen 0,20€-Münzen an:");
Scanner sc7 = new Scanner(System.in);
String Cent20 = sc.next();
if (Cent20.equals("a")){
continue;
}
int Cent20int = Integer.parseInt(Cent20);
System.out.println("Sie können den Vorgang jederzeit durch Druecken von 'a' abrechen");
System.out.println("Bitte geben Sie die Anzahl der eingeworfenen 0,10€-Münzen an:");
Scanner sc8 = new Scanner(System.in);
String Cent10 = sc.next();
if (Cent10.equals("a")){
continue;
}
int Cent10int = Integer.parseInt(Cent10);
System.out.println("Sie können den Vorgang jederzeit durch Druecken von 'a' abrechen");
System.out.println("Bitte geben Sie die Anzahl der eingeworfenen 0,05€-Münzen an:");
Scanner sc9 = new Scanner(System.in);
String Cent05 = sc.next();
if (Cent05.equals("a")){
continue;
}
int Cent05int = Integer.parseInt(Cent05);
}
}
// Methode zur Bestimmung des Restbetrags
double getRestbetrag() {
restbetrag = GesamtPorto;
restbetrag = restbetrag-2*rueckgeld[0]-1*rueckgeld[1]-0.5*rueckgeld[2]-0.2*rueckgeld[3]-0.1*rueckgeld[4]-0.05*rueckgeld[5];
return restbetrag;
}
//Eingabe der Sendungsdetails
static void Sendungsdetails() {
while (true) {
System.out.println("Geben Sie das Gewicht an") ;
Scanner sc = new Scanner(System.in);
String gewicht = sc.next();
int gewichtInt = Integer.parseInt(gewicht);
System.out.println("Geben Sie die Hoehe an") ;
Scanner sc2 = new Scanner(System.in);
String hoehe = sc.next();
double hoeheDouble = Double.parseDouble(hoehe);
int anzahlInt;
while (true) {
System.out.println("Geben Sie die Anzahl an");
System.out.println("HINWEIS: Es koennen nur maximal 10 Briefmarken gedruckt werden!");
Scanner sc3 = new Scanner(System.in);
String anzahl = sc.next();
int anzahlMarken = Integer.parseInt(anzahl);
if (anzahlMarken>10) {
System.out.println("Es koennen nur 10 Briefmarken gedruckt werden!");
continue;
}
else
anzahlInt=anzahlMarken;
break;
}
DecimalFormat df = new DecimalFormat( "###,##0.00" );
System.out.println(anzahlInt+ " mal " + Sendungstyp.typ(gewichtInt, hoeheDouble).getBezeichnung() + " je " + df.format(Sendungstyp.typ(gewichtInt, hoeheDouble).getPorto())+ " €");}
}
//Main-Methode
public static void main(String[] args) {
//EIngaben der Sendungsdetails durch Benutzer
Sendungsdetails();
//Muenzeinwurf
Muenzeinwurf();
//Ausgaben durch Automat
Output();
}
}
Als Fehler erhalte ich:
Cannot make a static reference to the non-static method Sendungsdetails() from the type BriefmarkenAutomat
Cannot make a static reference to the non-static method Muenzeinwurf() from the type BriefmarkenAutomat
Cannot make a static reference to the non-static method Output() from the type BriefmarkenAutomat
Als erstes soll der Sendungstyp über Höhe und Gewicht und dann das Gesamtporto (Anzahl der gewünschten Marken * Einzelporto), anschließend kann Geld eingeworfen werden.
Könnt ihr mir bitte helfen ?Umsetzungsanforderung: Erstellen Sie für jeden sach-logischen Aspekt des Automaten eine eigene Methode
Vielen Dank und Gruß Jan