[Java] Spezialisierter Taschenrechner



  • Ja Hallo, ist schon eine ganze Weile her das ich mich wieder bei euch melde.
    Vielleict kennen mich einige noch, aber wohl kaum 😉

    Genug von alten Zeiten geredet.

    Wir haben in "Programmierung, 1. Semester" eine Hausaufgabe aufbekommen, und zwar einen Tachenrechner zu schreiben.

    Hier mal die exakte Formulierung:

    Schreiben Sie ein Programm, das als Ziel den Brutto-Kilopreis von Bananen in Cent einließt (mit Hilfe der In-Klasse). Als zweite Zahl liest das Programm das Gewicht einer Menge von Bananen in Gramm. Beide sind ganze, nicht-negative Zahlen. Daraufhin gibt das Programm den Bruttooreis aus, wie im unten stehenden Beispiel.

    Erweitern Sie Ihr Programm so, dass es auch den Nettopreis und die enthaltene Mehrwertsteuer ausgibt. Der Mehrwertsteuersatz in Prozent wird als dritte Zahl eingelesen.

    Ausgabe Beispiel (Kilo-preis: 232 Cent, Gewicht: 1500 Gramm, MWSt: 16%)

    Brutto: 3.48 EURO
    MWSt: 0.48 EURO
    NETTO: 3.00 EURO

    Soweit erstmal zur Aufgabe.

    Nun müsste man 3 int-variablen erstmal festlegen, so mal als gedankenstüte.

    int kpreis;
    int gewicht;
    int mwst;
    

    Da ich sie ja in cent eingeben soll, später jedoch in euro ausgeben soll, stellt sich mir die Frage:

    Gleich nach der Abfrage der int-werte gleich konvertieren in float, oder doch double. Eigentlich müsste ja float reichen.

    Ja und das mit Werten einlesen in Java ist ja mal auch n Ding der Unmöglichkeit, unsere Dozentin hat uns so eine In Klasse geschrieben mit allerlei Zeugs drin. Später sollen wir sie mit

    kpreis=In.readln();
    

    glaub ich, einlesen. Warum ist das so kompliziert. Ist das der PReis für Platformunabhängiges Programmieren?

    cout>>
    cin<<
    

    Das war einfach, aber so .. pfff .. no way

    So jetzt steht hier viel Text und ich glaub ihr habt auch kein Bock mehr zu lesen. Mir fehlt so gewissermaßen der anfang, im prinzip weiß ich was sie von mir will. Aber naja der 1. Schritt dazu, ihr kennt das doch 😉



  • cout>> ist nichts anderes wie System.out.println()
    Und fürs einlesen, kennst du den geilen Vorteil von gepufferten Streams?
    cin<< ist wie BufferedReader in = new BufferedReader(new InputStreamReader(Syste.in))



  • wie schon gesagt, 1. Semester.

    Wir haben noch nicht mal Schleifen durchgenommen, wird aber demnächst geschehen.



  • Und wie genau lautet deine Frage? Denn deine Hausaufgaben wird hier wohl keiner machen. 🤡



  • Hi

    ein bischen die suchfunktion im forum benutzt, hätte zumindest das Thema einlesen und ggf ausgeben erledigt.

    Umrechnen der Zahlenwerte in flot würde ich persönlich vermeiden. Da du die werte ja sowiso in cent einlist. und den punkt zwischen 2ter und 3ter Stelle reinzubekommen ist doch nur ein problem der ausgabe.

    String des Zahlenwertes mindestens 3 zeichen lanng.
    wenn nicht entsprechend erweitern. mit was und wo überlass ich dir.
    Dann den String an der passenden stelle teilen und entsprechend ausgeben. und den punkt, sowie das euro nicht vergessen

    Denn so schöne formatierungs regeln wie cout hat java leider nicht.

    Gruss Termite



  • Ach es gibt doch so viel. Beispielsweise StringTokenizer oder PrintWriter bzw PrintStream, wo sogar ein printf() bei ist.



  • Hi

    Also leute ich bitte euch habt mal bischen gedult mit unserem Freund.

    Also Mettwurzt ich würde dir Empfehlen dein Programme im 1. Semester nach dem EVA Prinzip aufzubauen.
    E = Eingabe
    V = Verarbeitung
    A = Ausgabe

    Also in der Aufgabe steht eigentlich sehr deutlich was deine Eingaben sind, ausserdem solltest du für jede Eingabe eine Varibale deklarieren (das kann sich event. in Zukunft ändern).

    Nun vervarbeitest du deine Varibalen (Eingaben) mit den Formeln die du dafür brauchst.

    Am Ende gibst du die sachen einfach strukturiert aus.

    Eingaben kannst du, wie Griffin schon gesagt hat, mit "BufferedReader in = new BufferedReader(new InputStreamReader(Syste.in))" realisieren.
    Du solltest dir auch angewöhnen die JavaDoc zu benutzen, das hilft verdammt viel am Anfang und auch in Zukunft.

    Ausgaben kannst du mittels System.out.println() realisieren.

    Die Formatierung der Ausgabe würde ich am Ende machen wenn alles klappt, dann kannst du dein QuellCode ja erweitern und verschönern, da lernt man auch viel.

    Zum schluss noch was, diese Aufgabe hat auch nichts mit schleifen zu tun.
    Ich glaube es soll euch nur Zeigen wie ihr recherchiert und eigenständig Quellcode schreibt.

    P.S: Tip von mir, verliebe dich in die JavaDoc, ohne wirst du es schwer haben.

    Bye



  • Mein Senf:

    //Eingabe
    Scanner in = new Scanner(System.in);
    ...
    int nInt = in.nextInt();
    
    // Ausgabe
    float nFloat = 45.2342f;
    System.out.printf("Ich koste %.2f €", nFloat);
    


  • Ich danke euch soweit schonmal, ja dieses Javadoc haben wir uns schonmal angeguggt. Ach schon "quellcode-mäßig" genutzt, also kommentieren lassen.

    Ich werd mich da mal durcharbeiten.

    @ beitrag über mir:

    ist das da oben ne klasse oder was? (was ganz oben steht)



  • Mal n anderes Problem bezüglich einer Eingrenzung:

    public class Testat1
    
    {
    
    	public static void main(String arg[])
    
    	{
    		// Deklaration der Variablen
    		int pin;
    		int betrag;
    
    		// START, Abfrage der PIN, keine Beschraenkung der Laenge
    		System.out.println("##########");
    		System.out.println("Enter PIN:");
    		pin=In.readInt();
    
    		// Abfrage das Betrages welcher abgehoben werden soll, mit Beschraenkung, Low=10 High=1000
    		System.out.println("Welcher Betrag soll abgehoben werden?");
    		betrag=In.readInt();
    
    			// Der Betrag ist kleiner 10 oder groesser 1000 oder gleich 0
    			if(betrag<10 || betrag>1000 || betrag==0)
    				{
    					System.out.println("Betrag ist ungueltig");
    				}
    
    			else
    				{
    
    					// Abfrage wegen Cent und nicht Vielfaches von 10
    					if(betrag==666)
    						{
    							System.out.println("error");
    						}
    
    					// Ausgabe des Betrages in 50,20,10 Euro Scheine
    					System.out.println("Korrekt");
    				}
    
    	}
    
    }
    

    Ich häng an dem letzten Schritt, mit dem Vielfachen von 10 sowie der Umrechnung mit den Euro-Scheinen.

    Ich dachte mir sowas bescheuertes wie:

    betrag/50=n
    

    Das halt "n" die Anzahl der 50er Scheine wäre, aber das wäre sowas von flasch wie überhaupt möglich, weil der Rest ja noch fehlt.



  • also wie ich definieren kann das 10 davon n teiler ist 😕

    edit:

    "Eine Zahl ist durch 10 teilbar genau dann, wenn ihre letzte Ziffer eine 0 ist."

    Diesen Ausdruck muss man irgendwie ja abfragen können, theoretisch.



  • Wie wärs mit Modulo?



  • Oh wie konnt ich das nur vergessen 😃
    1. Vorlesung über Operatoren und ich vergess es 😮

    public class Testat1
    
    {
    
    	public static void main(String arg[])
    
    	{
    		// Deklaration der Variablen
    		int pin;
    		int betrag;
    
    		// START, Abfrage der PIN, keine Beschraenkung der Laenge
    		System.out.println("##########");
    		System.out.println("Enter PIN:");
    		pin=In.readInt();
    
    		// Abfrage das Betrages welcher abgehoben werden soll, mit Beschraenkung, Low=10 High=1000
    		System.out.println("Welcher Betrag soll abgehoben werden?");
    		betrag=In.readInt();
    
    			// Der Betrag ist kleiner 10 oder groesser 1000 oder gleich 0
    			if(betrag<10 || betrag>1000 || betrag==0)
    				{
    					System.out.println("Fehler 1");
    				}
    
    			else
    				{
    
    					// Abfrage wegen Cent und nicht Vielfaches von 10
    					if(betrag%10==0)
    						{
    							System.out.println("ist teilbar durch 10");
    						}
    
    					else
    						{
    							System.out.println("Fehler 2");
    						}
    
    				}
    
    	}
    
    }
    

    Ok, hab das soweit umgeschrieben.

    Nun hab ich halt das Problem mit den Cents'. Ob ich es mit "." oder mit "," schreibe, verweist mich Java auf einen String. Soweit ganz ok, nur will ich das er WENN er sowas findet das irgendwie mit (cast) in eine float konvertiert und es demnach als Fehler interpretiert.

    falls das explizit auf "if" aufbaut, kann ich zu meiner Verteidigung sagen das wir das heute zum ersten mal gehört haben. Und ich ja sowieso nicht so der Programmierer bin @ Sufu [mettwurzt]
    Ich check das noch nicht so mit solch speziellen abfragen, ob das meinetwegen ein string ist oder ähnliches.

    Man möge mir verzeihen.


Anmelden zum Antworten