Wofür Parser??

Status
Nicht offen für weitere Antworten.

Tombery

Aktives Mitglied
Hi,

wegen meinem Studium lerne ich jetzt Java. Doch ich habe vorher noch nie so wirklich programmiert, deswegen verstehe ich einiges noch nicht.

Kann mir jemand erklären was es eigentlich genau mit den "parser" zu tun hat? also z.B. Integer.parseInt(args[0]) oder Double.parseDouble(args[0])? das will mir irgendwie nicht in den kopf. :bahnhof:

bis montag müssen wir jetzt auch schon ein arbeitsblatt mit 4 aufgaben fertig haben. die 1. aufgabe habe ich geschafft.
doch die 2. ...da kriege ich zwar die richtigen Ergebnisse raus, doch da habe ich die zeile "int boundary = Integer.parseInt(args[0]);" die wir einsetzen sollten garnicht benutzt...mir ist auch nicht klar, wofür die gut sein soll?

mein quelltext zur Aufgabe 2 (ein Programm für die Gaußsche Summenformel):

Java:
public class Gauss {
public static void main (String[]args){
int i;
int n;
n = 100;
//hier kann man n eine Obergrenze (Wert) zuweisen
i = ((n*(n+1))/2);
//hier wird die Gaußsche Summenformel mit dem zugewiesenen Wert (n) angewendet
System.out.println(i);
}
}

Hoffe auf Antworten! Danke im Voraus! :)
 

eRaaaa

Top Contributor
doch da habe ich die zeile "int boundary = Integer.parseInt(args[0]);" die wir einsetzen sollten garnicht benutzt...mir ist auch nicht klar, wofür die gut sein soll?

"args" ist ein string-array. also deine arguments, die du dem programm übergibst. args[0] = erstes argument. um damit nun richtig rechnen zu können, musst du diesen in einen numerischen datentypen umwandeln (hier z.b. int). das ganze machst du dann mit der klasse Integer und die methode dazu heißt parseInt().
zusammengefasst : der string wird dadurch in ein int gewandelt, damit sich damit z.b. rechnen lässt.
 

Tombery

Aktives Mitglied
achso...parser sind also sozusagen "umwandler".

aber die quelltexte funktionieren auch ohne? also bei der aufgabe 2 ging es ohne....

und wo setzt man die genau bei den quelltexten hin? ganz oben unter den main oder? (3 Zeile dann)
 

eRaaaa

Top Contributor
in deinem fall innerhalb der main ja.

bei dir steht ja n= 100; wo du definierst, dass dies die obergrenze sein soll. wahrscheinlich soll das ja aber nicht immer 100 sein, sondern die aufgabe ist so gestellt, dass der benutzer diese vorgeben kann(halt über die argumente beim programmstart)
daher auch
Java:
int boundary = Integer.parseInt(args[0]);  //boundary = grenze :D
 

Tombery

Aktives Mitglied
beim programmstart eingeben?
hm...und wie schreibt man das jetzt am besten um?

so?:

Java:
public class Gauss {
public static void main (String[]args){
int boundary = Integer.parseInt(args[0]);  
int i;
int n;
n = boundary;  
//eingegebende Obergrenze wird als n definiert
i = ((n*(n+1))/2);
//hier wird die Gaußsche Summenformel mit dem zugewiesenen Wert (n) angewendet
System.out.println(i);
}
}
 

eRaaaa

Top Contributor
beim programmstart eingeben?
hm...und wie schreibt man das jetzt am besten um?

so?:

Java:
public class Gauss {
public static void main (String[]args){
int boundary = Integer.parseInt(args[0]);  
int i;
int n;
n = boundary;  
//eingegebende Obergrenze wird als n definiert
i = ((n*(n+1))/2);
//hier wird die Gaußsche Summenformel mit dem zugewiesenen Wert (n) angewendet
System.out.println(i);
}
}

ja, würde funktionieren, ist aber etwas unschön und geht einfacher in 3 zeilen
Java:
public static void main(String[] args) {
		int boundary = Integer.parseInt(args[0]);   
		int i = ((boundary*(boundary+1))/2);
		System.out.println(i);
	}

starten z.b. dann so:
[c]java Gauss 100[/c] // boundary = 100
 

Tombery

Aktives Mitglied
ich bin jetzt bei der 3. aufgabe...aber die ist echt der hammer.
Man soll das Programm Geldautomat schreiben und der soll ausgeben:

Betrag: 499,99 (den schreibt man über die kommandozeile)
Hundert Euro: 4
Zwanzig Euro: 4
Zwei Euro: 9
Ein Euro: 1
Zwanzig Cent: 4
Zehn Cent: 1
Zwei Cent: 4
Ein Cent: 1

ich habe jetzt als quelltext:

Java:
public class Geldautomat {
public static void main (String[]args){
double betrag = Double.parseDouble(args[0]);
//hiermit kann der Betrag in die Kommandozeile eingegeben werden
int intZahl = (int) (doubleZahl + 0.5);
//Rundungsverfahren
int Zahl1 = betrag;
int Zahl2 =(Zahl1/100);
int Zahl3 =(betrag-(Zahl1/100))/20);
int Zahl4 =(((betrag-(Zahl1/100))/20)/2);
int Zahl5 =((((betrag-(Zahl1/100))/20)/2)/1);
double Zahl6 =(((((betrag-(Zahl1/100))/20)/2)/1)/0.20);
double Zahl7 =((((((betrag-(Zahl1/100))/20)/2)/1)/0.20)/0.10);
double Zahl8 =(((((((betrag-(Zahl1/100))/20)/2)/1)/0.20)/0.10)/0.02);
double Zahl9 =((((((((betrag-(Zahl1/100))/20)/2)/1)/0.20)/0.10)/0.02)/0.01);
System.out.println("Betrag:"Zahl1);
System.out.println("Hundert Euro:"Zahl2);
System.out.println("Zwanzig Euro:"Zahl3);
System.out.println("Zwei Euro:"Zahl4);
System.out.println("Ein Euro:"Zahl5);
System.out.println("Zwanzig Cent:"Zahl6);
System.out.println("Zehn Cent:"Zahl7);
System.out.println("Zwei Cent:"Zahl8);
System.out.println("Ein Cent:"Zahl9);
}
}

ich glaube..da ist iwas falsch...soviel aufwand ist bestimmt nicht beabsichtigt. :eek:

beim kompilieren jammert der auch noch, dass bei den system.out.println die klammern nicht stimmen. aber normalerweise verwendet man ja nur eine klammer wo man indentifier reinschreibt...oder halt text "...". also sehe ich da keinen fehler...
 

Ark

Top Contributor
Der Konkatenationsoperator für Strings in Java ist das +-Zeichen. Anders gesagt: Es heißt [c]"Betrag:" + Zahl1[/c] usw.

Zur einfacheren Berechnung: / und % sind deine Freunde. ;)

Ark
 

Tombery

Aktives Mitglied
ok, habe ich umgeändert....doch jetzt beklagt sich der compiler wegen den kommas ";" am ende jedes int´s. ???:L

zu der rechnung:

ich glaube ich habe alles falsch....ich überlege nochmal :rtfm::

geldbetrag: 499,99

Hundert Euro: 4 (=499,99/100)

Zwanzig Euro: 4 (=99,99/20)

Zwei Euro: 9 (=19,99/2)

aber....wie kommt man auf die 99,99 im quelltext...da kann man ja nur 499,99-400,00 machen was wiederum 499,99-(4*100) ist....also ähm....Geldbetrag-(Hunderter*100) ist für die nächste zeile komplett dann:

int Zwanziger = ((Geldbetrag-(Hunderter*100))/20)
und für die übernächste zeile wäre das dann
int Zwei_Euro = ((Geldbetrag-(Hunderter*100))-(Zwanziger*20)/2)) und das wird immer länger und länger....kürzer kann man das ja garnicht machen. :noe:
 

Spin

Top Contributor
Java:
double zahl2 = (int)(zahl1 - zahl1%100)/100;  // 499,99 - 99,99 /100 = 4  R 99,99

Dann aber so , denn Modulo gibt dir den Rest zurück, und mit dem kann er nichts anfangen ^^.

PS:

System.out.println("Betrag:" + zahl1); Das + (plus) nicht vergessen.!
 

eRaaaa

Top Contributor
Java:
double zahl2 = (int)(zahl1 - zahl1%100)/100;  // 499,99 - 99,99 /100 = 4  R 99,99

Dann aber so , denn Modulo gibt dir den Rest zurück, und mit dem kann er nichts anfangen ^^.

PS:

System.out.println("Betrag:" + zahl1); Das + (plus) nicht vergessen.!

ich wollte ihn nur nochmal auf den modulooperator hinweisen.
aber btw: was ist denn 499,99 mod 100 ? (und genau das hatte er gesucht :D )
 
Zuletzt bearbeitet:

Spin

Top Contributor
aber btw: was ist denn 499,99 mod 100 ? (und genau das hatte er gesucht )


Das sind ja die 99,99.
Und damit kann er ja im ersten moment nicht viel anfangen ^^.
Die muss er dann in eine variable rest speichern , und die wieder im nachhinein mit modulo 20 nehmen.

D.h.: 99,99 %20 = 19,99.

dass heißt (99,99 - 19,99) / 20 =4 .

Und so weiter . Nun denke ich mal , dass er diese Aufgabe gelöst bekommt :)
 

Tombery

Aktives Mitglied
so! ich habs jetzt nochmal umgeändert...doch leider meckert der compiler immernoch, diesmal über das rundungsverfahren bei dem double und einer klammer :autsch:

wieso stehen eigentlich jetzt überall double´s? wegen den kommazahlen und dem modulus oder?

der jetzige quelltext:

Java:
public class Geldautomat {
public static void main (String[]args){
double betrag = Double.parseDouble(args[0]);
//hiermit kann der Betrag in die Kommandozeile eingegeben werden
int intZahl = (int) (doubleZahl + 0.5);
//Rundungsverfahren
double Geldbetrag = betrag;
double Hunderter =(int)(Geldbetrag-Geldbetrag%100)/100;
double Zwanziger =(int)(Geldbetrag%100)/20;
double Zwei_Euro =(int)(Geldbetrag%120)/2;
double Ein_Euro =(int)(Geldbetrag%122)/1;
double Zwanzig_Cent =(int)(Geldbetrag%123)/0.20;
double Zehn_Cent =(int)(Geldbetrag%123.20)/0.10;
double Zwei_Cent =(int)(Geldbetrag%123.30)/0.02;
double Ein_Cent =(int)(Geldbetrag%123.32)/0.01;
System.out.println("Betrag:"+Geldbetrag);
System.out.println("Hundert Euro:"+Hunderter);
System.out.println("Zwanzig Euro:"+Zwanziger);
System.out.println("Zwei Euro:"+Zwei_Euro);
System.out.println("Ein Euro:"+Ein_Euro);
System.out.println("Zwanzig Cent:"+Zwanzig_Cent);
System.out.println("Zehn Cent:"+Zehn_Cent);
System.out.println("Zwei Cent:"+Zwei_Cent);
System.out.println("Ein Cent:"+Ein_Cent);
}
}
 

eRaaaa

Top Contributor
er meckert, weil du
Java:
int intZahl = (int) (doubleZahl + 0.5);
schreibst, doubleZahl aber nirgends deklariert/initialisiert ist.
 

Ark

Top Contributor
Ein heißer Tipp im Umgang mit % und /: Verzichte auf Gleitkommazahlen! Nimm Ganzzahlen.

Im konkreten Fall solltest du also den Geldbetrag in einen ganzzahligen Centbetrag umrechnen und anschließend nur noch mit Ganzzahlen arbeiten. Damit riskierst du keine Ungenauigkeiten, die sich schnell fortpflanzen können, denn üblicherweise werden /-%-Paarungen sehr oft hintereinander angewandt benötigt.

Damit hätte sich dann auch die Sache mit dem Datentyp ([c]double[/c] oder [c]int[/c]) erledigt.

Ark
 

Marco13

Top Contributor
Ark's Tipp solltest du auf jeden Fall berücksichtigen. Und ansonsten, ganz allgemein: Sowas wie
Geldbetrag%123.32
sieht GANZ schräg aus :autsch: und ich könnte mir vorstellen, dass sowas zu massiven Problemen führen kann - und (müßte mal überlegen) es könnte evtl. auch sein, dass dort (selbst wenn man es in 12332 cent umwandelt und nur mit ganzen Zahlen rechnet) zu falschen Ergebnissen führt.
Was mich an der Aufgabenstellung ein bißchen irritiert: Warum gibt es keine 50€ und 10€ und 50 cent? ???:L Ist das Absicht, oder ... wurde das vergessen? Und die Spannende Frage: Was must du machen, wenn der Lehrer jetzt sagt, dass dort auch 50€ eingebaut werden sollen? Ja, dann bist du "gef*...t", weil du dann den ganzen Kram mit "123.32" usw. neu ausrechnen musst.

Schau mal, ob du in dein Programm nicht sowas wie
int einheiten[] = new int[]{ 100 * 100, 20 * 100, 2 * 100, 1 * 100, 20, 10, 2, 1 };
und - wenn's sein muss - auch noch ein
String einheitenNamen = new String[] { "Hundert Euro", "Zwanzig Euro" ... };
einbauen kannst....
 

Tombery

Aktives Mitglied
ok, habs jetzt auf ganze zahlen.

ich weiß nicht wieso die lehrerin 50 Euro etc. nicht dazu genommen hat. ist wohl nicht so relevant. und ich glaube auch nicht, dass sie plötzlich sagt, dass wir 50 Euro etc. einfügen sollen.

ähm.....es geht immernoch nicht. als fehler werden jetzt die schrägstriche bei den rechnungen angezeigt. also langsam aber sicher fange ich an zu verzweifeln. :bahnhof:

quelltext:

Java:
public class Geldautomat {
public static void main (String[]args){
double betrag = Double.parseDouble(args[0]);
//hiermit kann der Betrag in die Kommandozeile eingegeben werden
double Geldbetrag = betrag;
int Hunderter =((Geldbetrag-Geldbetrag%100)/100);
//Rechnung für 499,99: (499,99-99,99/100)=4
int Zwanziger =((Geldbetrag%100)/20);
int Zwei_Euro =((Geldbetrag%120)/2);
//der Modulus ergibt sich hier aus 100+20
int Ein_Euro =((Geldbetrag%122)/1);
int Zwanzig_Cent =((Geldbetrag%12300)/20);
//Euro wird für eine einfachere Berechnung auf Cent umgewandelt
int Zehn_Cent =((Geldbetrag%12320)/10);
int Zwei_Cent =((Geldbetrag%12330)/2);
int Ein_Cent =((Geldbetrag%12332)/1);
System.out.println("Betrag:"+Geldbetrag);
System.out.println("Hundert Euro:"+Hunderter);
System.out.println("Zwanzig Euro:"+Zwanziger);
System.out.println("Zwei Euro:"+Zwei_Euro);
System.out.println("Ein Euro:"+Ein_Euro);
System.out.println("Zwanzig Cent:"+Zwanzig_Cent);
System.out.println("Zehn Cent:"+Zehn_Cent);
System.out.println("Zwei Cent:"+Zwei_Cent);
System.out.println("Ein Cent:"+Ein_Cent);
}
}
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Geldbetrag ist noch double, bei der Rechnung kommt double raus, das soll einen int zugewiesen werden -> geht nicht.
int Geldbetrag = (int)Math.round(betrag * 100); // Geldbetrag in cent ausrechnen
...

100 Euro sind übrigens nicht 100 cent, sondern 100*100.

Überleg' dir die Sache mit dem Array wirklich noch mal. Es geht da auch um "höheres" als die Lösung, die für diese eine Aufgabe gefordert ist...............
 

Tombery

Aktives Mitglied
ok...jetzt habe ich das:

Java:
public class Geldautomat {
public static void main (String[]args){
int einheiten[] = new int[]{10000, 2000, 200, 100, 20, 10, 2, 1};
String einheitenNamen = new String[] {"Hundert Euro", "Zwanzig Euro", "Zwei Euro", "Ein Euro", "Zwanzig Cent", "Zehn Cent", "Zwei Cent", "Ein Cent"};
double betrag = Double.parseDouble(args[0]);
//hiermit kann der Betrag in die Kommandozeile eingegeben werden
int Geldbetrag = (int)Math.round(betrag*100);
//Euro wird für eine einfachere Berechnung auf Cent umgewandelt und aufgerundet
int Hunderter =((Geldbetrag-Geldbetrag%10000)/10000);
//Rechnung für 499,99: (49999-9999/10000)=4
int Zwanziger =((Geldbetrag%10000)/2000);
int Zwei_Euro =((Geldbetrag%12000)/200);
//der Modulus ergibt sich hier aus 10000+2000
int Ein_Euro =((Geldbetrag%12200)/100);
int Zwanzig_Cent =((Geldbetrag%12300)/20);
int Zehn_Cent =((Geldbetrag%12320)/10);
int Zwei_Cent =((Geldbetrag%12330)/2);
int Ein_Cent =((Geldbetrag%12332)/1);
System.out.println("Betrag:"+Geldbetrag);
System.out.println("Hundert Euro:"+Hunderter);
System.out.println("Zwanzig Euro:"+Zwanziger);
System.out.println("Zwei Euro:"+Zwei_Euro);
System.out.println("Ein Euro:"+Ein_Euro);
System.out.println("Zwanzig Cent:"+Zwanzig_Cent);
System.out.println("Zehn Cent:"+Zehn_Cent);
System.out.println("Zwei Cent:"+Zwei_Cent);
System.out.println("Ein Cent:"+Ein_Cent);
}
}

ich glaube das mit den arrays war keine gute idee XD""" das verwirrt mich nur noch mehr, besonders weil der compiler das mal garnicht mag.
kennt ihr zufällig gute websites die java einfach erklären? also so kleinigkeiten, wie man z.B. arrays richtig benutzt. ich google rum, aber leider finde ich keine guten erklärungen oder beispiele. in dem einführungsbuch was wir haben, findet sich komischerweise auch kein kapitel darüber....vielleicht ist es ja selbsterklärend, aber nicht für mich.

jemand....hat mir jetzt nochmal nen tipp gegeben, dass die beträge einfach zu komisch sind und es so nicht funktionieren würde.
jetzt habe ich das hier, die fehlermeldung hats wohl diesmal iwas auf source abgesehen...liegt wohl an den double int, doch vorher war das noch nicht:

Java:
public class Geldautomat2 {
public static void main (String[]args){
double betrag = Double.parseDouble(args[0]);
//hiermit kann der Betrag in die Kommandozeile eingegeben werden
double Restbetrag = (int)Math.round(betrag);
//Euro wird für eine einfachere Berechnung auf Cent umgewandelt und aufgerundet
int Hunderter =(int)(Restbetrag/100);
//Rechnung bei 499,99: 499,99/100 = 4
Restbetrag = (Restbetrag%100);
//Rechnung bei 499,99: 499,99%100 = 99,99
int Zwanziger =(int)(Restbetrag/20);
Restbetrag = (Restbetrag%20);
int Zwei_Euro =(int)(Restbetrag/2);
Restbetrag = (Restbetrag%2);
int Ein_Euro =(int)(Restbetrag/1);
Restbetrag = (Restbetrag%1);
int Zwanzig_Cent =(int)(Restbetrag/0.20);
Restbetrag = (Restbetrag%0.20);
int Zehn_Cent =(int)(Restbetrag/0.10);
Restbetrag = (Restbetrag%0.10);
int Zwei_Cent =(int)(Restbetrag/0.02);
Restbetrag = (Restbetrag%0.02);
int Ein_Cent =(int)(Restbetrag/0.01);
System.out.println("Betrag:"+Restbetrag);
System.out.println("Hundert Euro:"+Hunderter);
System.out.println("Zwanzig Euro:"+Zwanziger);
System.out.println("Zwei Euro:"+Zwei_Euro);
System.out.println("Ein Euro:"+Ein_Euro);
System.out.println("Zwanzig Cent:"+Zwanzig_Cent);
System.out.println("Zehn Cent:"+Zehn_Cent);
System.out.println("Zwei Cent:"+Zwei_Cent);
System.out.println("Ein Cent:"+Ein_Cent);
}
}
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Das mit dem Restbetrag ist schonmal gut (das ist ein Schritt in Richtung des Arrays und der Schleife: Ich wollte damit genau darauf hinaus, dass man jeden Schritt einzeln machen kann, ohne 123.442422 usw....). Ein Fehlermeldung gibt's da aber nicht - es kommen nur (noch) falsche Ergebnisse raus...
 

Tombery

Aktives Mitglied
nochmalige änderung MIT arrays:

Java:
public class Geldautomat2 {
public static void main (String[]args){
double betrag = Double.parseDouble(args[0]);
//hiermit kann der Betrag in die Kommandozeile eingegeben werden
int einheiten[] = new int[]{100, 20, 2, 1, 0.20, 0.10, 0.02, 0.01};
String einheitenNamen = new String[] {"Betrag:", "Hundert Euro:", "Zwanzig Euro:", "Zwei Euro:", "Ein Euro:", "Zwanzig Cent:", "Zehn Cent", "Zwei Cent", "Ein Cent"};
double Restbetrag = (int)Math.round(betrag);
//Euro wird für eine einfachere Berechnung auf Cent umgewandelt und aufgerundet
int Hunderter =(int)(Restbetrag/100);
//Rechnung bei 499,99: 499,99/100 = 4
Restbetrag = (Restbetrag%100);
//Rechnung bei 499,99: 499,99%100 = 99,99
int Zwanziger =(int)(Restbetrag/20);
Restbetrag = (Restbetrag%20);
int Zwei_Euro =(int)(Restbetrag/2);
Restbetrag = (Restbetrag%2);
int Ein_Euro =(int)(Restbetrag/1);
Restbetrag = (Restbetrag%1);
int Zwanzig_Cent =(int)(Restbetrag/0.20);
Restbetrag = (Restbetrag%0.20);
int Zehn_Cent =(int)(Restbetrag/0.10);
Restbetrag = (Restbetrag%0.10);
int Zwei_Cent =(int)(Restbetrag/0.02);
Restbetrag = (Restbetrag%0.02);
int Ein_Cent =(int)(Restbetrag/0.01);
System.out.println("Betrag:"+Restbetrag);
System.out.println("Hundert Euro:"+Hunderter);
System.out.println("Zwanzig Euro:"+Zwanziger);
System.out.println("Zwei Euro:"+Zwei_Euro);
System.out.println("Ein Euro:"+Ein_Euro);
System.out.println("Zwanzig Cent:"+Zwanzig_Cent);
System.out.println("Zehn Cent:"+Zehn_Cent);
System.out.println("Zwei Cent:"+Zwei_Cent);
System.out.println("Ein Cent:"+Ein_Cent);
}
}

der fehler wird bei dem string-array gezeigt. doch das ist komisch, weil doch "Betrag:" etc, die einzigen Strings (Wörter) in dem code sind, die man halt als array machen kann. die anderen sachen sind ja alle zahlen also int´s. man kann nur diese wörter benutzen.

schleife? du denkst, wir brauchen jetzt schon eine schleife?? nein. ich möchte es so einfach wie möglich halten. aber du meinst wahrscheinlich dafür...dass der eingegebene betrag eher kleiner oder gleich eines int´s ist und es nicht überall ne zahl rauskommt. aber dann kommt ja 0 raus. also passt es.
 

Marco13

Top Contributor
Du solltest dir die Grundlagen der Sprache zumindest so weit aneignen, dass du Compilerfehler selbst beheben kannst - sonst führt das hier zu nichts........
String einheitenNamen[] = new String[] { ... }
 

faetzminator

Gesperrter Benutzer
Also mit Arrays kann man wundervolle Sachen machen, wie wärs mit folgendem Beispiel:
Java:
public class Geldautomat2 {

    public static final int[] UNITS = new int[] {100 * 100, 20 * 100, 2 * 100, 1 * 100, 20, 10, 2, 1};
    public static final String[] UNIT_NAMES = new String[] {"Hundert Euro", "Zwanzig Euro", "Zwei Euro",
            "Ein Euro", "Zwanzig Cent", "Zehn Cent", "Zwei Cent", "Ein Cent"};

    public static void main(String[] args) {
        int amount = (int) (Double.parseDouble(args[0]) * 100);
        System.out.println("Betrag: ".concat(String.valueOf(amount / 100.0)));
        for (int i = 0; i < UNITS.length; i++) {
            print(UNIT_NAMES[i], amount / UNITS[i]);
            amount %= UNITS[i];
        }
    }

    private static void print(String label, int value) {
        System.out.println(label.concat(": ").concat(String.valueOf(value)));
    }
}

Man könnte natürlich auch für UNIT, UNIT_NAME jeweils eine Map anlegen.

Edit: Siehe Marco13's Post
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Dieser Code liegt im prinzip schon bei mir zuhause auf dem Rechner, und ich wollte ihn langsam un behutsam dort hin führen - und jetzt machst du alles kaputt ;( ;)
Lediglich die Schleife hatte ich durch ein
count = amount / UNITS;
amount %= UNITS;
gemacht, aber das ist eher ein Detail.
 

faetzminator

Gesperrter Benutzer
@Marco13:
hab ich mir zuerst auch gedacht, aber als ich "die Lösung mit Arrays" des TO gesehen habe, dacht ich mir, der kommt nie auf diese Idee... *seufz* Natürlich ist die Lösung mit [c]/[/c] und [c]%[/c] sauberer, warum habe ich nicht an das gedacht?
 

Marco13

Top Contributor
Nun, was heißt "sauberer" ... Es könnte gut sein, dass die Lösung mit der Schleife sogar effizienter ist, aber ... das spielt erstmal ja keine große Rolle...
 

Tombery

Aktives Mitglied
ok, hier:

Java:
public class Geldautomat2 {
public static void main (String[]args){
double betrag = Double.parseDouble(args[0]);
//hiermit kann der Betrag in die Kommandozeile eingegeben werden
int einheiten[] = new int[]{100, 20, 2, 1, 0.20, 0.10, 0.02, 0.01};
String einheitenNamen[] = new String[]{"Betrag:", "Hundert Euro:", "Zwanzig Euro:", "Zwei Euro:", "Ein Euro:", "Zwanzig Cent:", "Zehn Cent", "Zwei Cent", "Ein Cent"};
double Restbetrag = (int)Math.round(betrag);
//Euro wird für eine einfachere Berechnung auf Cent umgewandelt und aufgerundet
int Hunderter =(int)(Restbetrag/100);
//Rechnung bei 499,99: 499,99/100 = 4
Restbetrag = (Restbetrag%100);
//Rechnung bei 499,99: 499,99%100 = 99,99
int Zwanziger =(int)(Restbetrag/20);
Restbetrag = (Restbetrag%20);
int Zwei_Euro =(int)(Restbetrag/2);
Restbetrag = (Restbetrag%2);
int Ein_Euro =(int)(Restbetrag/1);
Restbetrag = (Restbetrag%1);
int Zwanzig_Cent =(int)(Restbetrag/0.20);
Restbetrag = (Restbetrag%0.20);
int Zehn_Cent =(int)(Restbetrag/0.10);
Restbetrag = (Restbetrag%0.10);
int Zwei_Cent =(int)(Restbetrag/0.02);
Restbetrag = (Restbetrag%0.02);
int Ein_Cent =(int)(Restbetrag/0.01);
System.out.println("Betrag:"+Restbetrag);
System.out.println("Hundert Euro:"+Hunderter);
System.out.println("Zwanzig Euro:"+Zwanziger);
System.out.println("Zwei Euro:"+Zwei_Euro);
System.out.println("Ein Euro:"+Ein_Euro);
System.out.println("Zwanzig Cent:"+Zwanzig_Cent);
System.out.println("Zehn Cent:"+Zehn_Cent);
System.out.println("Zwei Cent:"+Zwei_Cent);
System.out.println("Ein Cent:"+Ein_Cent);
}
}

und...ENDLICH!!!!!!!!! das programm läuft!!!! :applaus:
*so stolz auf sich ist* :D

es kommen zwar die falschen ergebnisse raus (wieso auch immer :noe:), aber wenigstens läuft es mal. das problem ist nur noch, dass ich es bis 23:55 heute noch hochladen muss....egal wie fehlerhaft der code auch ist. mich nervts nur, dass wir so ein programm ohne richtige vorkenntnisse zum laufen bringen sollen. die paar folien ohne erläuterungen schnell durchzuklicken ist schon hart.

ok...jetzt läufts doch nicht mehr XDDDDDDDD habe nochmal die arrays dazu kopiert...und ja....ohne arrays läufts wenigstens und mit läufts garnicht. (habe des bei den Strings mit den eckigen Klammern ausgebessert) ähm.......ich glaube weil ich die int Zahlen falsch definiert habe....denn die gleitzahlen (Cent-Zahlen, 0.10, 0.20 etc) sind ja keine int´s sondern wieder doubles...das problem ist aber...dass ich ja die cent NICHT auf euro umgewandelt habe. also gibts kein "100*100" etc. bei mir. hm.............oder......ich mache...........*überleg*

Java:
int einheiten[] = new int[]{100, 20, 2, 1, 0.20, 0.10, 0.02, 0.01};

ZU

Java:
double einheiten[] = new int[]{100, 20, 2, 1, 0.20, 0.10, 0.02, 0.01};

geht das?


@faetzminator

danke für deinen beitrag und entschuldige dass ich darauf nicht eingegangen bin, aber da haben wir einige sachen in deinem code glaube ich noch garnicht im unterricht durchgenommen.
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Wie gesagt: Ein bißchen Eigeninitiative muss man glaub' ich erwarten können - auch wenn der Lehrer in Folien eine Thema nur kurz anreißt. Hast du schonmal überlegt, ob du dir nicht vielleicht Internetanschluss zulegen solltest? Da findet man viele Informationen (Pornos, und Informationen), und findet nach einer Weile auch sicher heraus, dass es wenn dann
double einheiten[] = new double[]{100, 20, 2, 1, 0.20, 0.10, 0.02, 0.01};
heißen müßte.
 

Tombery

Aktives Mitglied
ja aber seltsamerweise finde ich solche informationen im internet nicht XDDD wenn du wüsstest, wie oft ich schon google benutzt habe. ;)

außerdem ist es ja nicht der vortrag an sich, sondern halt überwiegend die kurze zeit, in der man sich einarbeiten muss. 2 doppelstunden und schon muss man sowas können. naja...vielleicht habe ich auch einfach ein handicap bzgl. programmieren XD

zurück zum code:

das mit dem doppel double dachte ich mir schon...aber da sollen ja eigentlich keine double´s sondern int´s rauskommen......aber wenn die nachher sowieso wieder in den rechnungen unten in int´s verwandelt werden, geht es wohl (da fällt mir gerade ein, dass man ja double garnicht in int umwandeln darf/kann...naja egal.).
hab jetzt das zweite int wie du geschrieben hast mit nem double ersetzt.....aber jetzt kommen komische zahlen raus...ich habe 499,99 eingegeben, aber der nimmt die 499,99 als int (ganze zahl), also 500. und jetzt hat er nur bei "hundert euro: 5" rausgeworfen und bei den anderen 0.....aber ich habe doch die eingabe (kommandozeile) mit DOUBLE definiert! grrrr! *pc aus fenster schmeiß* XD *lol*
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Du solltest dich entscheiden zwischen double und int. Und ich würde dir zu int raten, und das ganze mit cents berechnen. Bei Fragen den aktuellen Stand posten.
 

Tombery

Aktives Mitglied
<.< na gut....eigentlich sollten wir ja schon das hier benutzen:

Java:
double Restbetrag = (int)Math.round(betrag);

aber ok. dann wandle ich alles nochmal von euro auf cent um, damit man nur noch int braucht. *zeile rauskick*

so.......
ich hoffe ich komme der lösung näher. ^^
ja....ich bin ihr verdammt nah, ich weiß es!

btw. dem compi gefällt das "Zwanzig Cent" bei string nicht, aber...einen rechtschreibfehler sehe ich jetzt nicht....oder bin ich blind? *nochmal drüberschau*

aktueller code:

Java:
public class Geldautomat2 {
public static void main (String[]args){
double betrag = Double.parseDouble(args[0]);
//hiermit kann der Betrag in die Kommandozeile eingegeben werden
int einheiten[] = new int[]{100*100, 20*100, 2*100, 1*100, 20, 10, 2, 1};
//Umwandlung von Euro auf Cent, damit man nur int benutzen kann (einfacher)
String einheitenNamen[] = new String[]{"Betrag:", "Hundert Euro:", "Zwanzig Euro:", "Zwei Euro:", "Ein Euro:", "Zwanzig Cent:", "Zehn Cent", "Zwei Cent", "Ein Cent"};
//Euro wird für eine einfachere Berechnung auf Cent umgewandelt und aufgerundet
int Hunderter =(int)(Restbetrag/10000);
//Rechnung bei 499,99: 499,99/(100*100) = 4
Restbetrag = (Restbetrag%10000);
//Rechnung bei 499,99: 499,99%(100*100) = 99,99
int Zwanziger =(int)(Restbetrag/2000);
Restbetrag = (Restbetrag%2000);
int Zwei_Euro =(int)(Restbetrag/200);
Restbetrag = (Restbetrag%200);
int Ein_Euro =(int)(Restbetrag/100);
Restbetrag = (Restbetrag%100);
int Zwanzig_Cent =(int)(Restbetrag/20);
Restbetrag = (Restbetrag%20);
int Zehn_Cent =(int)(Restbetrag/10);
Restbetrag = (Restbetrag%10);
int Zwei_Cent =(int)(Restbetrag/2);
Restbetrag = (Restbetrag%2);
int Ein_Cent =(int)(Restbetrag/1);
System.out.println("Betrag:"+Restbetrag);
System.out.println("Hundert Euro:"+Hunderter);
System.out.println("Zwanzig Euro:"+Zwanziger);
System.out.println("Zwei Euro:"+Zwei_Euro);
System.out.println("Ein Euro:"+Ein_Euro);
System.out.println("Zwanzig Cent:"+Zwanzig_Cent);
System.out.println("Zehn Cent:"+Zehn_Cent);
System.out.println("Zwei Cent:"+Zwei_Cent);
System.out.println("Ein Cent:"+Ein_Cent);
}
}
 

Marco13

Top Contributor
Ja, "Restbetrag" hat noch gefehlt...
Code:
public class Geldautomat {
public static void main (String[]args){
double betrag = 499.99; //Double.parseDouble(args[0]);
//hiermit kann der Betrag in die Kommandozeile eingegeben werden
int einheiten[] = new int[]{100*100, 20*100, 2*100, 1*100, 20, 10, 2, 1};
//Umwandlung von Euro auf Cent, damit man nur int benutzen kann (einfacher)
String einheitenNamen[] = new String[]{"Betrag:", "Hundert Euro:", "Zwanzig Euro:", "Zwei Euro:", "Ein Euro:", "Zwanzig Cent:", "Zehn Cent", "Zwei Cent", "Ein Cent"};
//Euro wird für eine einfachere Berechnung auf Cent umgewandelt und aufgerundet
int Restbetrag = (int)Math.round(betrag*100);
int Hunderter =(int)(Restbetrag/10000);
//Rechnung bei 499,99: 499,99/(100*100) = 4
Restbetrag = (Restbetrag%10000);
//Rechnung bei 499,99: 499,99%(100*100) = 99,99
int Zwanziger =(int)(Restbetrag/2000);
Restbetrag = (Restbetrag%2000);
int Zwei_Euro =(int)(Restbetrag/200);
Restbetrag = (Restbetrag%200);
int Ein_Euro =(int)(Restbetrag/100);
Restbetrag = (Restbetrag%100);
int Zwanzig_Cent =(int)(Restbetrag/20);
Restbetrag = (Restbetrag%20);
int Zehn_Cent =(int)(Restbetrag/10);
Restbetrag = (Restbetrag%10);
int Zwei_Cent =(int)(Restbetrag/2);
Restbetrag = (Restbetrag%2);
int Ein_Cent =(int)(Restbetrag/1);
System.out.println("Betrag:"+betrag);
System.out.println("Hundert Euro:"+Hunderter);
System.out.println("Zwanzig Euro:"+Zwanziger);
System.out.println("Zwei Euro:"+Zwei_Euro);
System.out.println("Ein Euro:"+Ein_Euro);
System.out.println("Zwanzig Cent:"+Zwanzig_Cent);
System.out.println("Zehn Cent:"+Zehn_Cent);
System.out.println("Zwei Cent:"+Zwei_Cent);
System.out.println("Ein Cent:"+Ein_Cent);
}
}

Die Arrays bringen übrigens nichts, wenn du sie nicht benutzt ... die kannst du im Moment auch einfach weglassen.....
 

Tombery

Aktives Mitglied
warte!! warte!!! XDDDDD
ich habs geschafft!!!!! endlich!!! :D

hier:

Java:
public class Geldautomat {
public static void main (String[]args){
double betrag = Double.parseDouble(args[0]);
//hiermit kann der Betrag in die Kommandozeile eingegeben werden
int einheiten[] = new int[]{100*100, 20*100, 2*100, 1*100, 20, 10, 2, 1};
//Umwandlung von Euro auf Cent, damit man nur int benutzen kann (einfacher)
String einheitenNamen[] = new String[]{"Betrag:", "Hundert Euro:", "Zwanzig Euro:", "Zwei Euro:", "Ein Euro:", "Zwanzig Cent:", "Zehn Cent", "Zwei Cent", "Ein Cent"};
//Euro wird für eine einfachere Berechnung auf Cent umgewandelt und aufgerundet
double Restbetrag = (int)Math.round(betrag*100);
int Hunderter =(int)(Restbetrag/10000);
//Rechnung bei 499,99: 499,99/(100*100) = 4
Restbetrag = (Restbetrag%10000);
//Rechnung bei 499,99: 499,99%(100*100) = 99,99
int Zwanziger =(int)(Restbetrag/2000);
Restbetrag = (Restbetrag%2000);
int Zwei_Euro =(int)(Restbetrag/200);
Restbetrag = (Restbetrag%200);
int Ein_Euro =(int)(Restbetrag/100);
Restbetrag = (Restbetrag%100);
int Zwanzig_Cent =(int)(Restbetrag/20);
Restbetrag = (Restbetrag%20);
int Zehn_Cent =(int)(Restbetrag/10);
Restbetrag = (Restbetrag%10);
int Zwei_Cent =(int)(Restbetrag/2);
Restbetrag = (Restbetrag%2);
int Ein_Cent =(int)(Restbetrag/1);
Restbetrag = Double.parseDouble(args[0]);
System.out.println("Betrag:"+Restbetrag);
System.out.println("Hundert Euro:"+Hunderter);
System.out.println("Zwanzig Euro:"+Zwanziger);
System.out.println("Zwei Euro:"+Zwei_Euro);
System.out.println("Ein Euro:"+Ein_Euro);
System.out.println("Zwanzig Cent:"+Zwanzig_Cent);
System.out.println("Zehn Cent:"+Zehn_Cent);
System.out.println("Zwei Cent:"+Zwei_Cent);
System.out.println("Ein Cent:"+Ein_Cent);
}
}

ES FUNKTIONIERT! XDDD
 

Tombery

Aktives Mitglied
lust noch kurz über die aufgabe 4 drüberzuschauen?

wenn nicht, dann ist es ok XDDD also ich bin da keinem böse. immerhin habe ich ja euch schon genug mit der 3. aufgabe gequält XDD" *sry*

die 4. aufgabe ist aber eh nur EBNF. also nur text.

hier ist die 4. aufgabe:

4.a)
Platznummerierung in einem Flugzeug:

6 Sitze in einer Reihe:

letter => "A" | "B" | "C" | "D" | "E" | "F"

39 Reihen:

digitnonull => "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "10" | "11"
| "12" | "13" | "14" | "15" | "16" | "17" | "18" | "19" | "20" | "21"
| "22" | "23" | "24" | "25" | "26" | "27" | "28" | "29" | "30" | "31"
| "32" | "33" | "34" | "35" | "36" | "37" | "38" | "39"

digit => "0" | digitnonull

numeral => letter digitnonull {"0" | digitnonull}

Beispiele: A1, B22, C30

ich denke aber das es stimmt. also klingt für mich logisch.
oh...mir fällt gerade auf....dass man ja bei numeral....das {"0" | digitnonull} auch weglassen kann....stimmt das?

hingegen ist die 4 b) viel schwieriger, aber die ist echt auch kompliziert. ist eine mit platzhaltern und sowas wie 0aaAaa0bBb0A0bbBbb0aAa0 und dazu den richtigen code etc. das muss ich ja hier nicht ausführen. ich glaube ist auch nicht so schlimm wenn ich die falsch habe.
 
Zuletzt bearbeitet:

faetzminator

Gesperrter Benutzer
Öhm was musst du da machen? Das sind irgendwelche Informationen, welche toll sind, aber ich weiss nicht was ich damit anfangen soll. Zu meinem Post: wenn du Arrays verwendest, zielst du genau auf eine Lösung wie Marco13's oder meine - ansonsten kannst du die Arrays auch gleich bleiben lassen.
 

Tombery

Aktives Mitglied
Aufgabe a) Definieren Sie mit EBNF die Grammatik zur Platznummerierung in einem Flugzeug mit 39 Reihen und 6 Sitzen in einer Reihe. Zur Identifizierung der Sitzplätze verwenden sie Platznummern, die sich aus Buchstaben und Zahlen zusammensetzen, z.B A5, F25, C17,...

öhm...soll das heißen ich soll die arrays jetzt einfach rauslöschen? oô oder ist das schlimm, die drin zu lassen?
 

Marco13

Top Contributor
Da sie überflüssig sind, IST es schlimm, sie drin zu lassen - aber nicht so schlimm, dass dadruch die Lösung falsch wird ;) Aber ist ja jetzt wohl eh gelaufen...
 

Landei

Top Contributor
Java:
int restbetrag = (int) Math.round(betrag*100);
//und dann in Cent weiterrechnen
int hunderter = restbetrag/10000;
//u.s.w.

Ansonsten wie schon gesagt: Zur Übersichtlichkeit eine Schleife verwenden.
 

Tombery

Aktives Mitglied
*sich mal wieder meld*

ich habe die bewertung "akzeptiert" bekommen, also war alles einigermaßen richtig *freu*

und nochmal zu den schleifen:
die hatten wir da noch garnicht durchgenommen, deswegen haben wir die da nicht benutzt. aber JETZT haben wir sie durch. ich poste mal einen neuen thread. (folgen hatten wir übrigens auch noch nicht)

Und nochmal vielen Dank für eure Hilfe!!!!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Fats Waller Wofür stehen diese Konstanten im Java Labyrinth ? Java Basics - Anfänger-Themen 5
G Wofür benötigt man die Umgebungsvariablen sowohl in Windows 10 als auch in Mac OS Catalina Java Basics - Anfänger-Themen 19
J Wofür dienen Interfaces ? Java Basics - Anfänger-Themen 1
F Mehrere Konstruktoren? Wofür? Java Basics - Anfänger-Themen 21
S "%s" oder "%n" - wofür nutzt man das? Java Basics - Anfänger-Themen 4
H Wofür benötigt man ByteBuffer? Java Basics - Anfänger-Themen 5
K Wofür wird heute noch die Stack Klasse in Java genutzt Java Basics - Anfänger-Themen 4
R Wofür abstract? Java Basics - Anfänger-Themen 29
Z This() Wofür Java Basics - Anfänger-Themen 2
T Wofür ist ANT? Java Basics - Anfänger-Themen 5
V Wofür steht das args / arguments in Main Methode Java Basics - Anfänger-Themen 4
D Was ist ein StringReader und wofür braucht man ihn? Java Basics - Anfänger-Themen 2
N Look & Feel Nimbus wofür? Java Basics - Anfänger-Themen 10
G Wofür com package? + Welche eclipse - Plug Ins? Java Basics - Anfänger-Themen 3
K java syntax: wofür steht super(screen)? Java Basics - Anfänger-Themen 5
J Wofür steht \r? Java Basics - Anfänger-Themen 7
D argv Warum? Wofür? Weshalb? Java Basics - Anfänger-Themen 2
Ras Unterschied zwischen parser xml and api xml Java Basics - Anfänger-Themen 7
B Parser dynamisieren Java Basics - Anfänger-Themen 7
W Einfachen, ein beliebiges Zeichen oft erkennenden Regex Parser selber schreiben - wie vorgehen? Java Basics - Anfänger-Themen 12
D Input/Output CSV Parser list unvollständig Java Basics - Anfänger-Themen 25
U DOM Parser, kleine Frage Java Basics - Anfänger-Themen 29
H java date-time parser Java Basics - Anfänger-Themen 1
X SAX Parser, wie weit ist der eigentlich? Java Basics - Anfänger-Themen 6
O HTML -> BBCode Parser? Java Basics - Anfänger-Themen 3
J kleiner Fehler im FAQ Parser für mathematische Formeln Java Basics - Anfänger-Themen 5
H Welcher Html-Parser? Java Basics - Anfänger-Themen 8
M htlm parser Java Basics - Anfänger-Themen 8
U Benötige ich einen Parser? Java Basics - Anfänger-Themen 2
T Parser mit switch "Weg" ausgeben? Java Basics - Anfänger-Themen 5
A html parser Java Basics - Anfänger-Themen 5
T XML Parser Java Basics - Anfänger-Themen 21
data89 Frage zum FAQ-'Parser für mathematische Formeln' Java Basics - Anfänger-Themen 4
A Gettext-Parser: Rad neu erfinden Java Basics - Anfänger-Themen 6
G Eigener Parser Java Basics - Anfänger-Themen 4
G guter Parser Java Basics - Anfänger-Themen 4
G Parser liefert StackOverflow error Java Basics - Anfänger-Themen 6
L URL Parser (String zusammensetzen) Java Basics - Anfänger-Themen 2
G If-Parser + Interpreter Java Basics - Anfänger-Themen 9
E HTML Parser Java Basics - Anfänger-Themen 8
B Parser HTML Java Basics - Anfänger-Themen 10
J Noch ein Parser Problem Java Basics - Anfänger-Themen 7
J Richtigen Parser wählen Java Basics - Anfänger-Themen 2
M.C.S. Parser: Flut von Variablen und if-Conditions eindämmen Java Basics - Anfänger-Themen 4
A Parser Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben