Ich habe vor Ca. 2 Monaten mit meiner Ausbildung angefangen und hatte zuvor keine weiteren Programmier-Kenntnisse..
Jetzt haben wir/ich eine Aufgabe bekommen in der ich ein Programm schreiben soll. Was das Programm machen soll ist erstmal egal weil es gar nicht um den "Hauptteil" geht.
So, jetzt sollen wir es aber so machen, dass wenn wir 2 mal die selbe Eingabe haben das Programm beendet...
Das Problem ist auch das wir KEINE Arrays, Strings und Imports benutzen dürfen.
Als Tipp haben wir das 'Potenzieren' bekommen.
Ich hoffe ihr könnt damit was anfangen, denke aber das ist nicht sehr schwer wenn man es weiß
Also die Aufgabenstellung für diese war:
"Ihr Programm soll solange Ziffernfolgen in int-Werte konvertieren, bis zweimal hintereinander dieselbe Zahl eingegeben wird."
Wenn mit Ziffernfolge eine Folge von Ziffern 0-9 gemeint ist, und ob eine solche Ziffer zweimal eingeben wurde, dann würde folgendes funktionieren. Man nehme eine 10-stellige-Binärzahl, eine 1 bedeutet, die entsprechende Ziffer wurde bereits eingegeben.
Um die Wertigkeit der einzelnen Ziffern im Dezimalsystem auszudrücken ( * 10^n ) ?? Denn wenn man mit System.in.read liest dann muss man die Ziffern selber zu einem int zusammenbasteln. Deshalb meine Frage wie gelesen wird
Ja ich denke um meinen Ausbilder zufrieden zu stellen sicher schon. Aber meine Lösung ist glaube ich nicht die sauberste.
Aber das wird hoffentlich nach der Zeit
So er hat sich das Ganze gestern Abend mal angeguckt. Ist soweit alles richtig.
Ich hatte ihm gesagt, dass ich die Verarbeitung von Vorzeichen nicht hinbekommen habe. Jetzt muss ich es aber machen und weiß immernoch nicht wie.
Wenn ich in das Terminal z.B. +12 eingebe, wird das "+" zu einer "-5" und das Ergebnis wird dann logischerweise auch komplett falsch ausgegeben...
Vielleicht kann mir doch nochmal jemand helfen.
Danke
Respekt. Da habt ihr euch ja ganz schön einen abgebrochen um einen Teil eines Scanner's nachzubilden.
Funktioniert die "istZiffer(...) richtig ? Wenn du +12 eingibst sollte er dann zuerst einmal in den else-Zweig dazu gehen. Und dann macht er das aktuellerEintrag() = ende(aktuellerEintrag);
hast du dich da jetzt nur verschrieben oder was ist das ?
publicclassAufgabe2{publicstaticint letzerEintrag;publicstaticint aktuellerEintrag;publicstaticvoidmain(String[]args)throwsException{init();}/* Aktueller Eintrag wird auf 0 gesetzt
* Methode (eingabe) wird gestartet
*/publicstaticvoidinit(){
aktuellerEintrag =0;eingabe();}/* Eingabe wird eingelesen */publicstaticvoideingabe()throwsException{System.out.println("#######################################");System.out.println(" ");System.out.println("Gib deine gewünschten Ziffern ein: ");intZiffer=Systen.in.read();int anzahl =System.in.available();int anzahl2 =System.in.available();for(int i =0; anzahl > i;i++){if(istZiffer(Ziffer)){int c =wert((char)Ziffer);System.out.println("-"+ c +" - ");
aktuellerEintrag =speicher(aktuellerEintrag, c,(anzahl -1));}else{aktuellerEintrag()=ende(aktuellerEintrag);}Ziffer=System.in.read();
anzahl2 =System.in.available();}System.out.println();analayze();}/* Rechnet die Potenz aus */publicstaticintpotenz(int p){int ergebnis2 =1;for(int pot =0; pot < p; pot++){
ergebnis2 = ergebnis2 *10;}return ergebnis2;}/* Addiert die Potenzen der Eingabe */publicstaticvoidintspeicher(int p,int eingabe2,int potenz2){
p = p + eingabe2 *potenz(potenz2);returnP;}/* Ändert ASCII zu int */publicstaticintwert(char zeichen){return(zeichen -'0');}/* Prüft ob der aktuelle Eintrag mit dem letzten Eintrag übereinstimmt,
* wenn nicht, soll die Methode init ausgeführt werden
*/publicstaticvoidanalyze()throwsExcepetion{System.out.println("Deine Eingabe (nur Ziffern): "+ aktuellerEintrag);if(aktuellerEintrag == letzerEintrag){System.out.println("[ACHTUNG!] Wiederholung = STOP");}else{
letzerEintrag = aktuellerEintrag;init();}}/* Teilt Eingabe durch 10 wenn Buchstaben / Symbole vorhanden sind */publicstaticintende(int a){
a = a /10;return a;}/* Soll entscheiden ob ein Zeichen eine Ziffer ist oder nicht */publicstaticbooleanistZiffer(intZiffer){boolean ergebnis =false;switch(Ziffer){case'0';case'1';case'2';case'3';case'4';case'5';case'6';case'7';case'8';case'9'; ergebnis =true;break;default:break;}return ergebnis;}}
"Schreiben sie eine Methode, die Zahlen von der Standardeingabe ziffernweise einliest und sukzessive in einen int Wert umwandelt. Eine zweite Methode soll die resultierende Zahl zur Kontrolle über den Standard-Ausgabenstrom ausgeben."
"Schreiben sie eine Methode, die Zahlen von der Standardeingabe ziffernweise einliest und sukzessive in einen int Wert umwandelt. Eine zweite Methode soll die resultierende Zahl zur Kontrolle über den Standard-Ausgabenstrom ausgeben."
"Zunächst muss also eine Folge von Zeichen, nicht notwendig nur Ziffern, eingelesen werden, die mittels der RETURN-Taste beendet wird. Eine Zahl beginnt mit einer Ziffer, der beliebig viele weitere Ziffern folgen dürfen. Unmittelbar vor der ersten Ziffer, d.h. ohne Leerzeichen, dürfen auch Vorzeichen '+' oder '-' stehen. Abgeschlossen ist die Zahl, sobald das erste Zeichen, das keine Ziffer mehr ist, gelesen oder das Zeilenende erreicht wird.
Ziffern besitzen im Unicode aufeinanderfolgende Ordnungszahlen. Verwenden sie auf KEINEN Fall Konstanten für Ordnungszahlen.
Ihr Programm soll solange Ziffernfolgen in int-Werte konvertieren, bis zweimal hintereinander dieselbe Zahl eingegeben wird."
Ok, sei mir nicht böse aber das tut dein Code nicht. Der kann wirklich nur einziffrige Zahlen richtig behandeln.
Und ich tu mich gerade etwas schwer zu sagen du musst hier und da ändern und dann geht es. Man müsste den schon ziemlich umbauen.
Mhmmm Nöö. Einiges wird zufällig richtig behandelt weil du immer gleich falsch rechnest. Aber manches geht total ins Höschen. Gib z.B. mal "123" als Zahl ein ...
Mhmmm manchmal funktioniert sogar das. Aber manchmal gerät er in eine Schleife in der er gleiche Zahlen nicht mehr erkennt. Ich habe noch keine Ahnung warum
Mhmmm manchmal funktioniert sogar das. Aber manchmal gerät er in eine Schleife in der er gleiche Zahlen nicht mehr erkennt. Ich habe noch keine Ahnung warum
Ja. Funktioniert auch.
Das Programm soll ja nur die Zahlen wieder ausgeben. Und wenn ich z.B. 123abc456 eingebe sollen die Buchstaben wegfallen, damit man sie nicht mehr sieht.
Die Rechnung ist dafür da, wenn ich Buchstaben als input haben sollte, die Nullen wegfallen und wie schon gesagt nur die Zahlen ausgegeben werden.
Ja, ziemlich.. Lass mich nochmal kurz den Code kontrollieren weil ich habe den eigentlichen Code auf meinem Arbeits PC geschrieben, der aber keine Internetverbindung hat. und deswegen musste ich alles auf meinem eigenen Laptop abtippen.
Ich glaube ich habe den Fehler gefunden warum das bei dir so eine komische Ausgabe ist.
Ist natürlich ganz schlau anstatt "letzter", "letzer" zu schreiben...Hier ist der verbesserte Code:
Java:
publicclassAufgabe2{publicstaticint letzterEintrag;publicstaticint aktuellerEintrag;publicstaticvoidmain(String[]args)throwsException{init();}/* Aktueller Eintrag wird auf 0 gesetzt
* Methode (eingabe) wird gestartet
*/publicstaticvoidinit(){
aktuellerEintrag =0;eingabe();}/* Eingabe wird eingelesen */publicstaticvoideingabe()throwsException{System.out.println("#######################################");System.out.println(" ");System.out.println("Gib deine gewünschten Ziffern ein: ");intZiffer=Systen.in.read();int anzahl =System.in.available();int anzahl2 =System.in.available();for(int i =0; anzahl > i;i++){if(istZiffer(Ziffer)){int c =wert((char)Ziffer);System.out.println("-"+ c +" - ");
aktuellerEintrag =speicher(aktuellerEintrag, c,(anzahl -1));}else{aktuellerEintrag()=ende(aktuellerEintrag);}Ziffer=System.in.read();
anzahl2 =System.in.available();}System.out.println();analayze();}/* Rechnet die Potenz aus */publicstaticintpotenz(int p){int ergebnis2 =1;for(int pot =0; pot < p; pot++){
ergebnis2 = ergebnis2 *10;}return ergebnis2;}/* Addiert die Potenzen der Eingabe */publicstaticvoidintspeicher(int p,int eingabe2,int potenz2){
p = p + eingabe2 *potenz(potenz2);returnP;}/* Ändert ASCII zu int */publicstaticintwert(char zeichen){return(zeichen -'0');}/* Prüft ob der aktuelle Eintrag mit dem letzten Eintrag übereinstimmt,
* wenn nicht, soll die Methode init ausgeführt werden
*/publicstaticvoidanalyze()throwsExcepetion{System.out.println("Deine Eingabe (nur Ziffern): "+ aktuellerEintrag);if(aktuellerEintrag == letzterEintrag){System.out.println("[ACHTUNG!] Wiederholung = STOP");}else{
letzterEintrag = aktuellerEintrag;init();}}/* Teilt Eingabe durch 10 wenn Buchstaben / Symbole vorhanden sind */publicstaticintende(int a){
a = a /10;return a;}/* Soll entscheiden ob ein Zeichen eine Ziffer ist oder nicht */publicstaticbooleanistZiffer(intZiffer){boolean ergebnis =false;switch(Ziffer){case'0';case'1';case'2';case'3';case'4';case'5';case'6';case'7';case'8';case'9'; ergebnis =true;break;default:break;}return ergebnis;}}
publicclassAufgabe2{publicstaticint letzterEintrag;publicstaticint aktuellerEintrag;publicstaticvoidmain(String[]args)throwsException{init();}/* Aktueller Eintrag wird auf 0 gesetzt
* Methode (eingabe) wird gestartet
*/publicstaticvoidinit(){
aktuellerEintrag =0;eingabe();}/* Eingabe wird eingelesen */publicstaticvoideingabe()throwsException{System.out.println("#######################################");System.out.println(" ");System.out.println("Gib deine gewünschten Ziffern ein: ");intZiffer=Systen.in.read();int anzahl =System.in.available();int anzahl2 =System.in.available();for(int i =0; anzahl > i;i++){if(istZiffer(Ziffer)){int c =wert((char)Ziffer);System.out.println("-"+ c +" - ");
aktuellerEintrag =speicher(aktuellerEintrag, c,(anzahl -1));}else{aktuellerEintrag()=ende(aktuellerEintrag);}Ziffer=System.in.read();
anzahl2 =System.in.available();}System.out.println();analayze();}/* Rechnet die Potenz aus */publicstaticintpotenz(int p){int ergebnis2 =1;for(int pot =0; pot < p; pot++){
ergebnis2 = ergebnis2 *10;}return ergebnis2;}/* Addiert die Potenzen der Eingabe */publicstaticintspeicher(int p,int eingabe2,int potenz2){
p = p + eingabe2 *potenz(potenz2);returnP;}/* Ändert ASCII zu int */publicstaticintwert(char zeichen){return(zeichen -'0');}/* Prüft ob der aktuelle Eintrag mit dem letzten Eintrag übereinstimmt,
* wenn nicht, soll die Methode init ausgeführt werden
*/publicstaticvoidanalyze()throwsExcepetion{System.out.println("Deine Eingabe (nur Ziffern): "+ aktuellerEintrag);if(aktuellerEintrag == letzterEintrag){System.out.println("[ACHTUNG!] Wiederholung = STOP");}else{
letzterEintrag = aktuellerEintrag;init();}}/* Teilt Eingabe durch 10 wenn Buchstaben / Symbole vorhanden sind */publicstaticintende(int a){
a = a /10;return a;}/* Soll entscheiden ob ein Zeichen eine Ziffer ist oder nicht */publicstaticbooleanistZiffer(intZiffer){boolean ergebnis =false;switch(Ziffer){case'0';case'1';case'2';case'3';case'4';case'5';case'6';case'7';case'8';case'9'; ergebnis =true;break;default:break;}return ergebnis;}}
Soo jetzt aber: Das ist der richtige Code.
Führ den nochmal aus:
Java:
publicclassAufgabe2{publicstaticint letzterEintrag;publicstaticint aktuellerEintrag;publicstaticvoidmain(String[]args)throwsException{init();}/* Aktueller Eintrag wird auf 0 gesetzt
* Methode (eingabe) wird gestartet
*/publicstaticvoidinit()throwsException{
aktuellerEintrag =0;eingabe();}/* Eingabe wird eingelesen */publicstaticvoideingabe()throwsException{System.out.println("#######################################");System.out.println(" ");System.out.println("Gib deine gewünschten Ziffern ein: ");intZiffer=System.in.read();int anzahl =System.in.available();int anzahl2 =System.in.available();for(int i =0; anzahl > i;i++){if(istZiffer(Ziffer)){int c =wert((char)Ziffer);System.out.println("-"+ c +" - ");
aktuellerEintrag =speicher(aktuellerEintrag, c,(anzahl2 -1));}else{
aktuellerEintrag =ende(aktuellerEintrag);}Ziffer=System.in.read();
anzahl2 =System.in.available();}System.out.println();analyze();}/* Rechnet die Potenz aus */publicstaticintpotenz(int p){int ergebnis2 =1;for(int pot =0; pot < p; pot++){
ergebnis2 = ergebnis2 *10;}return ergebnis2;}/* Addiert die Potenzen der Eingabe */publicstaticintspeicher(int p,int eingabe2,int potenz2){
p = p + eingabe2 *potenz(potenz2);return p;}/* Ändert ASCII zu int */publicstaticintwert(char zeichen){return(zeichen -'0');}/* Prüft ob der aktuelle Eintrag mit dem letzten Eintrag übereinstimmt,
* wenn nicht, soll die Methode init ausgeführt werden
*/publicstaticvoidanalyze()throwsException{System.out.println("Deine Eingabe (nur Ziffern): "+ aktuellerEintrag);if(aktuellerEintrag == letzterEintrag){System.out.println("[ACHTUNG!] Wiederholung = STOP");}else{
letzterEintrag = aktuellerEintrag;init();}}/* Teilt Eingabe durch 10 wenn Buchstaben / Symbole vorhanden sind */publicstaticintende(int a){
a = a /10;return a;}/* Soll entscheiden ob ein Zeichen eine Ziffer ist oder nicht */publicstaticbooleanistZiffer(intZiffer){boolean ergebnis =false;switch(Ziffer){case'0':case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9': ergebnis =true;break;default:break;}return ergebnis;}}
Soo jetzt aber: Das ist der richtige Code.
Führ den nochmal aus:
Java:
publicclassAufgabe2{publicstaticint letzterEintrag;publicstaticint aktuellerEintrag;publicstaticvoidmain(String[]args)throwsException{init();}/* Aktueller Eintrag wird auf 0 gesetzt
* Methode (eingabe) wird gestartet
*/publicstaticvoidinit()throwsException{
aktuellerEintrag =0;eingabe();}/* Eingabe wird eingelesen */publicstaticvoideingabe()throwsException{System.out.println("#######################################");System.out.println(" ");System.out.println("Gib deine gewünschten Ziffern ein: ");intZiffer=System.in.read();int anzahl =System.in.available();int anzahl2 =System.in.available();for(int i =0; anzahl > i;i++){if(istZiffer(Ziffer)){int c =wert((char)Ziffer);System.out.println("-"+ c +" - ");
aktuellerEintrag =speicher(aktuellerEintrag, c,(anzahl2 -1));}else{
aktuellerEintrag =ende(aktuellerEintrag);}Ziffer=System.in.read();
anzahl2 =System.in.available();}System.out.println();analyze();}/* Rechnet die Potenz aus */publicstaticintpotenz(int p){int ergebnis2 =1;for(int pot =0; pot < p; pot++){
ergebnis2 = ergebnis2 *10;}return ergebnis2;}/* Addiert die Potenzen der Eingabe */publicstaticintspeicher(int p,int eingabe2,int potenz2){
p = p + eingabe2 *potenz(potenz2);return p;}/* Ändert ASCII zu int */publicstaticintwert(char zeichen){return(zeichen -'0');}/* Prüft ob der aktuelle Eintrag mit dem letzten Eintrag übereinstimmt,
* wenn nicht, soll die Methode init ausgeführt werden
*/publicstaticvoidanalyze()throwsException{System.out.println("Deine Eingabe (nur Ziffern): "+ aktuellerEintrag);if(aktuellerEintrag == letzterEintrag){System.out.println("[ACHTUNG!] Wiederholung = STOP");}else{
letzterEintrag = aktuellerEintrag;init();}}/* Teilt Eingabe durch 10 wenn Buchstaben / Symbole vorhanden sind */publicstaticintende(int a){
a = a /10;return a;}/* Soll entscheiden ob ein Zeichen eine Ziffer ist oder nicht */publicstaticbooleanistZiffer(intZiffer){boolean ergebnis =false;switch(Ziffer){case'0':case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9': ergebnis =true;break;default:break;}return ergebnis;}}
ich habe zuerst 1 eingegeben und dann 101 .... die 101 hat er dann nicht mehr registriert. Ich habe auch zwischendrin nicht auf return gedrückt und nix. ich hatte halt davor irgendwelche wilden Kombinationen eingegeben. Und ich glaube man kann ihn irgendwie in einen Zustand bringen wo er mit den Eingaben durcheinander kommt. Ich weiss nur noch nicht wie.
ich habe zuerst 1 eingegeben und dann 101 .... die 101 hat er dann nicht mehr registriert. Ich habe auch zwischendrin nicht auf return gedrückt und nix. ich hatte halt davor irgendwelche wilden Kombinationen eingegeben. Und ich glaube man kann ihn irgendwie in einen Zustand bringen wo er mit den Eingaben durcheinander kommt. Ich weiss nur noch nicht wie.