# Mehrere Zahlen speichern



## Benutzer187 (6. Sep 2017)

Hallo,

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ß 

Vielen Dank im Voraus!


----------



## Flown (6. Sep 2017)

Gibts dazu eine genaue Aufgabenstellung? 2 gleiche Eingaben hintereinander oder welche schon mal getätigt wurden... Sehr vage die Beschreibung!


----------



## Benutzer187 (6. Sep 2017)

Ja tut mir leid. Hast recht.

Also die Aufgabenstellung für diese war:
"Ihr Programm soll solange Ziffernfolgen in int-Werte konvertieren, bis zweimal hintereinander dieselbe Zahl eingegeben wird."


----------



## Flown (6. Sep 2017)

Was ist wenn du dir einfach die zuletzt eingebene Zahl merkst und mit der neuen vergleichst?


----------



## JStein52 (6. Sep 2017)

Benutzer187 hat gesagt.:


> KEINE Arrays, Strings und Imports benutzen dürfen


Ohne import ?


----------



## Benutzer187 (6. Sep 2017)

Ja ohne.


----------



## CSHW89 (6. Sep 2017)

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.

Grüße
Kevin


----------



## JStein52 (6. Sep 2017)

Benutzer187 hat gesagt.:


> Ja ohne.


Und wie macht ihr das einlesen ?


----------



## Benutzer187 (6. Sep 2017)

Mit System.in.read.


----------



## JStein52 (6. Sep 2017)

CSHW89 hat gesagt.:


> Man nehme eine 10-stellige-Binärzahl, eine 1 bedeutet, die entsprechende Ziffer wurde bereits eingegeben


Und warum nicht einfach ? Siehe @Flown


----------



## CSHW89 (6. Sep 2017)

Ups das "hintereinander" hab ich überlesen. Die Frage ist dann aber, warum gibts ein Tipp "Potenzieren"?


----------



## JStein52 (6. Sep 2017)

Benutzer187 hat gesagt.:


> Mit System.in.read


Und den Teil hast du schon ?


----------



## Benutzer187 (6. Sep 2017)

Ja das habe ich schon. Ich muss 'nur' noch bei gleicher Eingabe das Programm zum Stoppen/Beenden  bringen.


----------



## JStein52 (6. Sep 2017)

CSHW89 hat gesagt.:


> warum gibts ein Tipp "Potenzieren"


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


----------



## JStein52 (6. Sep 2017)

Benutzer187 hat gesagt.:


> gleicher Eingabe


dann hast du zwei int-Variablen in denen du die vorherige und die gerade gelesene speicherst ?


----------



## Benutzer187 (6. Sep 2017)

Ja. Als ich das Thema erstellt hatte noch nicht. 
Habe es aber jetzt.


----------



## JStein52 (6. Sep 2017)

ok, also alles gut ??


----------



## Benutzer187 (6. Sep 2017)

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 

Danke an alle!


----------



## Benutzer187 (7. Sep 2017)

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


----------



## JStein52 (7. Sep 2017)

Ja, aber dazu müsste man mal den Code sehen wie du das einliest ...


----------



## Benutzer187 (7. Sep 2017)

Das ist jetzt nur der Teil zum einlesen.



```
/* Eingabe wird eingelesen */

    public static void eingabe() throws Exception {
       
        System.out.println("#######################################");
        System.out.println(" ");
        System.out.println("Gib deine gewünschten Ziffern ein: ");
       
        int Ziffer = 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();
    }
```


----------



## JStein52 (7. Sep 2017)

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 ?


----------



## Benutzer187 (7. Sep 2017)

So das ist mein kompletter Code:


```
public class Aufgabe2 {
    public static int letzerEintrag;
    public static int aktuellerEintrag;
   
    public static void main(String[]args) throws Exception {
        init();
    }

/* Aktueller Eintrag wird auf 0 gesetzt
* Methode (eingabe) wird gestartet
*/
     public static void init() {
         aktuellerEintrag = 0;
         eingabe();
     }

/* Eingabe wird eingelesen */

    public static void eingabe() throws Exception {
       
        System.out.println("#######################################");
        System.out.println(" ");
        System.out.println("Gib deine gewünschten Ziffern ein: ");
       
        int Ziffer = 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 */

    public static int potenz(int p) {
        int ergebnis2 = 1;
       
        for (int pot = 0; pot < p; pot++) {
            ergebnis2 = ergebnis2 * 10;
        }return ergebnis2;
    }
   
/* Addiert die Potenzen der Eingabe */

    public static void int speicher(int p, int eingabe2, int potenz2) {
        p = p + eingabe2 * potenz(potenz2);
        return P;
    }
   
/* Ändert ASCII zu int */
   
    public static int wert(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
*/
     public static void analyze() throws Excepetion {
         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 */

    public static int ende(int a) {
        a = a / 10;
        return a;
    }
   
/* Soll entscheiden ob ein Zeichen eine Ziffer ist oder nicht */

    public static boolean istZiffer(int Ziffer) {
        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;
    }
}
```


----------



## Benutzer187 (7. Sep 2017)

Und es funktioniert alles... Aber halt nur mit den Ziffern von 0 bis 9  

So war auch die Aufgabenstellung.


----------



## JStein52 (7. Sep 2017)

Ok, ich habe mal deine Schreibfehler korrigiert und festgestellt dass Eingaben aus mehr als einer Ziffer generell falsch behandelt werden.


----------



## JStein52 (7. Sep 2017)

Benutzer187 hat gesagt.:


> Aber halt nur mit den Ziffern von 0 bis 9


Stimmt


----------



## Benutzer187 (7. Sep 2017)

JStein52 hat gesagt.:


> Stimmt



Also in der Aufgabenstellung stand:

"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."


----------



## Benutzer187 (7. Sep 2017)

Benutzer187 hat gesagt.:


> Also in der Aufgabenstellung stand:
> 
> "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."


----------



## JStein52 (7. Sep 2017)

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.


----------



## Benutzer187 (7. Sep 2017)

Okay... Irgendwie dachte ich mir das 
Aber mein Ausbilder meinte, dass das so richtig wäre und ich nur noch die Vorzeichen verarbeiten soll.


----------



## JStein52 (7. Sep 2017)

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 ...


----------



## JStein52 (7. Sep 2017)

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


----------



## Benutzer187 (7. Sep 2017)

Ja habe ich. Klappt auch.
123 wird untereinander geschrieben und als "Deine Eingabe" kommt 123.


----------



## Benutzer187 (7. Sep 2017)

JStein52 hat gesagt.:


> 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


Okay. Wenn du nichts heraus bekommst ist das auch nicht schlimm. Mein Ausbilder kommt morgen wieder und dann rede ich mit ihm...


----------



## JStein52 (7. Sep 2017)

Oder gib mal 1234 und 1235 ein


----------



## JStein52 (7. Sep 2017)

Ich bin nur dabei rauszufinden ob es tatsächlich reicht das Vorzeichen noch abzufangen


----------



## Benutzer187 (7. Sep 2017)

JStein52 hat gesagt.:


> Oder gib mal 1234 und 1235 ein



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.


----------



## Benutzer187 (7. Sep 2017)

JStein52 hat gesagt.:


> Ich bin nur dabei rauszufinden ob es tatsächlich reicht das Vorzeichen noch abzufangen


Achsoo okay


----------



## JStein52 (7. Sep 2017)

Merkwürdige Ausgabe oder:

#######################################
Gib deine gewünschten Ziffern ein:
1235

Deine Eingabe (nur Ziffern): 0
#######################################
Gib deine gewünschten Ziffern ein:
istZiffer: 50
Ergebnis: true
-2 -
istZiffer: 51
Ergebnis: true
-3 -
istZiffer: 53
Ergebnis: true
-5 -

Deine Eingabe (nur Ziffern): 1000
#######################################
Gib deine gewünschten Ziffern ein:
1235

Deine Eingabe (nur Ziffern): 0
#######################################
Gib deine gewünschten Ziffern ein:

Deine Eingabe (nur Ziffern): 0
[ACHTUNG!] Wiederholung = STOP


----------



## Benutzer187 (7. Sep 2017)

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.


----------



## Benutzer187 (7. Sep 2017)

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:


```
public class Aufgabe2 {
    public static int letzterEintrag;
    public static int aktuellerEintrag;
  
    public static void main(String[]args) throws Exception {
        init();
    }

/* Aktueller Eintrag wird auf 0 gesetzt
* Methode (eingabe) wird gestartet
*/
     public static void init() {
         aktuellerEintrag = 0;
         eingabe();
     }

/* Eingabe wird eingelesen */

    public static void eingabe() throws Exception {
      
        System.out.println("#######################################");
        System.out.println(" ");
        System.out.println("Gib deine gewünschten Ziffern ein: ");
      
        int Ziffer = 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 */

    public static int potenz(int p) {
        int ergebnis2 = 1;
      
        for (int pot = 0; pot < p; pot++) {
            ergebnis2 = ergebnis2 * 10;
        }return ergebnis2;
    }
  
/* Addiert die Potenzen der Eingabe */

    public static void int speicher(int p, int eingabe2, int potenz2) {
        p = p + eingabe2 * potenz(potenz2);
        return P;
    }
  
/* Ändert ASCII zu int */
  
    public static int wert(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
*/
     public static void analyze() throws Excepetion {
         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 */

    public static int ende(int a) {
        a = a / 10;
        return a;
    }
  
/* Soll entscheiden ob ein Zeichen eine Ziffer ist oder nicht */

    public static boolean istZiffer(int Ziffer) {
        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;
    }
}
```


----------



## Benutzer187 (7. Sep 2017)

Sorry...Der war wieder falsch.. 

Hier jetzt der richtige 

```
public class Aufgabe2 {
    public static int letzterEintrag;
    public static int aktuellerEintrag;
   
    public static void main(String[]args) throws Exception {
        init();
    }

/* Aktueller Eintrag wird auf 0 gesetzt
* Methode (eingabe) wird gestartet
*/
     public static void init() {
         aktuellerEintrag = 0;
         eingabe();
     }

/* Eingabe wird eingelesen */

    public static void eingabe() throws Exception {
       
        System.out.println("#######################################");
        System.out.println(" ");
        System.out.println("Gib deine gewünschten Ziffern ein: ");
       
        int Ziffer = 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 */

    public static int potenz(int p) {
        int ergebnis2 = 1;
       
        for (int pot = 0; pot < p; pot++) {
            ergebnis2 = ergebnis2 * 10;
        }return ergebnis2;
    }
   
/* Addiert die Potenzen der Eingabe */

    public static int speicher(int p, int eingabe2, int potenz2) {
        p = p + eingabe2 * potenz(potenz2);
        return P;
    }
   
/* Ändert ASCII zu int */
   
    public static int wert(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
*/
     public static void analyze() throws Excepetion {
         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 */

    public static int ende(int a) {
        a = a / 10;
        return a;
    }
   
/* Soll entscheiden ob ein Zeichen eine Ziffer ist oder nicht */

    public static boolean istZiffer(int Ziffer) {
        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;
    }
}
```


----------



## JStein52 (7. Sep 2017)

Gib z.B. mal direkt nach dem Start des Programmes eine Zahl ein die mit 1 beginnt ...
Wenn man die allerdings später eingibt geht es


----------



## Benutzer187 (7. Sep 2017)

Bei mir geht es auch wenn ich am Anfang eine 1 eingebe... Ich weiß nicht woran das liegt.


----------



## JStein52 (7. Sep 2017)

Mhmm  ... auch nicht immer beim nächsten Versuch geht es. Irgendwo ist da ein merkwürdiger Fehler drinnen


----------



## Benutzer187 (7. Sep 2017)

Soo jetzt aber: Das ist der richtige Code.
Führ den nochmal aus:


```
public class Aufgabe2 {
    public static int letzterEintrag;
    public static int aktuellerEintrag;
   
    public static void main(String[]args) throws Exception {
        init();
    }

/* Aktueller Eintrag wird auf 0 gesetzt
* Methode (eingabe) wird gestartet
*/
     public static void init() throws Exception{
         aktuellerEintrag = 0;
         eingabe();
     }

/* Eingabe wird eingelesen */

    public static void eingabe() throws Exception {
       
        System.out.println("#######################################");
        System.out.println(" ");
        System.out.println("Gib deine gewünschten Ziffern ein: ");
       
        int Ziffer = 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 */

    public static int potenz(int p) {
        int ergebnis2 = 1;
       
        for (int pot = 0; pot < p; pot++) {
            ergebnis2 = ergebnis2 * 10;
        }return ergebnis2;
    }
   
/* Addiert die Potenzen der Eingabe */

    public static int speicher(int p, int eingabe2, int potenz2) {
        p = p + eingabe2 * potenz(potenz2);
        return p;
    }
   
/* Ändert ASCII zu int */
   
    public static int wert(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
*/
     public static void analyze() throws Exception {
         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 */

    public static int ende(int a) {
        a = a / 10;
        return a;
    }
   
/* Soll entscheiden ob ein Zeichen eine Ziffer ist oder nicht */

    public static boolean istZiffer(int Ziffer) {
        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;
    }
}
```


----------



## Benutzer187 (7. Sep 2017)

Bei der Methode "eingabe" stand "anzahl" und nicht "anzahl2".





Benutzer187 hat gesagt.:


> Soo jetzt aber: Das ist der richtige Code.
> Führ den nochmal aus:
> 
> 
> ...


----------



## JStein52 (7. Sep 2017)

Schon wieder so was:

#######################################
Gib deine gewünschten Ziffern ein:
1
istZiffer: 49
Ergebnis: true
-1 -

Deine Eingabe (nur Ziffern): 1
#######################################
Gib deine gewünschten Ziffern ein:
101

Deine Eingabe (nur Ziffern): 0
#######################################
Gib deine gewünschten Ziffern ein:

Deine Eingabe (nur Ziffern): 0
[ACHTUNG!] Wiederholung = STOP

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.


----------



## Benutzer187 (7. Sep 2017)

JStein52 hat gesagt.:


> Schon wieder so was:
> 
> #######################################
> Gib deine gewünschten Ziffern ein:
> ...




Hast du jetzt genau den Code kopiert den ich als letztes geschickt hatte?


----------



## JStein52 (7. Sep 2017)

Ah, das sieht jetzt gut aus. Sag's doch gleich 
Jetzt ist es wohl wirklich nur noch das Vorzeichen


----------



## Benutzer187 (7. Sep 2017)

Sehr gut  Und jaa, ich hoffe es


----------



## JStein52 (7. Sep 2017)

Und als Idee würde ich sagen du machst dir analog zu istZiffer(...)  eine getVorzeichen(...) und die rufst du auf wenn i == 0 ist. Sie liefert dir als int entweder 1 wenn es ein + war und -1 wenn es ein - war, was passieren soll wenn man ?123 eingibt musst du dir noch überlegen. Und diesen Returnwert speicherst du dir analog zu letzterEintrag und aktuellerEintrag ab. z.B. aktuellesVorzeichen, letztes Vorzeichen. Und beim Vergleich der Eingabewerte multiplizierst du sie jeweils noch mit ihrem Vorzeichen.


```
if (istZiffer(Ziffer)) {

                int c = wert((char) Ziffer);
                System.out.println("-" + c + " - ");
                aktuellerEintrag = speicher(aktuellerEintrag, c, (anzahl2 - 1));
            } else {
                // hier noch auf +/- prüfen und dies merken.
                aktuellerEintrag = ende(aktuellerEintrag);
            }
```


----------



## Benutzer187 (7. Sep 2017)

Irgendwie verstehe ich das nicht ganz.. Wie meinst du "analog zu istZiffer..." ?




JStein52 hat gesagt.:


> Und als Idee würde ich sagen du machst dir analog zu istZiffer(...)  eine getVorzeichen(...) und die rufst du auf wenn i == 0 ist. Sie liefert dir als int entweder 1 wenn es ein + war und -1 wenn es ein - war, was passieren soll wenn man ?123 eingibt musst du dir noch überlegen. Und diesen Returnwert speicherst du dir analog zu letzterEintrag und aktuellerEintrag ab. z.B. aktuellesVorzeichen, letztes Vorzeichen. Und beim Vergleich der Eingabewerte multiplizierst du sie jeweils noch mit ihrem Vorzeichen.
> 
> 
> ```
> ...


----------



## JStein52 (7. Sep 2017)

Benutzer187 hat gesagt.:


> Wie meinst du "analog zu istZiffer..."


Ja, war blöd ausgedrückt. Einfach eine Methode die als Input das gelesene Zeichen kriegt, prüft ob es '+', '-' oder sonstwas war und dementsprechend 1, -1 zurückliefert. z.B. würde ich immer 1 zurückliefern ausser wenn es '-' war.


----------



## Benutzer187 (7. Sep 2017)

Danke erstmal. Aber ich bekomme es nicht hin. Ich bin komplett verwirrt  Tut mir leid


----------



## JStein52 (7. Sep 2017)

Vielleicht habe ich gleich Zeit dann probiere ich es mal.


----------



## Benutzer187 (7. Sep 2017)

JStein52 hat gesagt.:


> Vielleicht habe ich gleich Zeit dann probiere ich es mal.


Alles klar. Danke!!


----------



## JStein52 (7. Sep 2017)

So meinte ich das:

```
public class Aufgabe2 {

    public static int letzterEintrag;
    public static int aktuellerEintrag;
    public static int letztesVorzeichen = 1;
    public static int aktuellesVorzeichen = 1;

    public static void main(String[] args) throws Exception {
        init();
    }

    /* Aktueller Eintrag wird auf 0 gesetzt
* Methode (eingabe) wird gestartet
     */
    public static void init() throws Exception {
        aktuellerEintrag = 0;
        aktuellesVorzeichen = 1;
        eingabe();
    }

    /* Eingabe wird eingelesen */
    public static void eingabe() throws Exception {

        System.out.println("#######################################");
        System.out.println(" ");
        System.out.println("Gib deine gewünschten Ziffern ein: ");

        int Ziffer = 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 {
                if (i==0) {
                    aktuellesVorzeichen = istVorzeichen(Ziffer);
                    System.out.println("Vorzeichen: "+aktuellesVorzeichen);
                }
                aktuellerEintrag = ende(aktuellerEintrag);
            }
            Ziffer = System.in.read();
            anzahl2 = System.in.available();
        }
        System.out.println();
        analyze();
    }

    /* Rechnet die Potenz aus */
    public static int potenz(int p) {
        int ergebnis2 = 1;

        for (int pot = 0; pot < p; pot++) {
            ergebnis2 = ergebnis2 * 10;
        }
        return ergebnis2;
    }

    /* Addiert die Potenzen der Eingabe */
    public static int speicher(int p, int eingabe2, int potenz2) {
        p = p + eingabe2 * potenz(potenz2);
        return p;
    }

    /* Ändert ASCII zu int */
    public static int wert(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
     */
    public static void analyze() throws Exception {
        System.out.println("Deine Eingabe (nur Ziffern): " + aktuellerEintrag+" Vorzeichen: "+aktuellesVorzeichen+" "+letztesVorzeichen);

        if (aktuellesVorzeichen*aktuellerEintrag == letztesVorzeichen*letzterEintrag) {
            System.out.println("[ACHTUNG!] Wiederholung = STOP");
        } else {
            letzterEintrag = aktuellerEintrag;
            letztesVorzeichen = aktuellesVorzeichen;
            init();
        }
    }

    /* Teilt Eingabe durch 10 wenn Buchstaben / Symbole vorhanden sind */
    public static int ende(int a) {
        System.out.println("Ende: " + a);
        a = a / 10;
        return a;
    }

    /* Soll entscheiden ob ein Zeichen eine Ziffer ist oder nicht */
    public static boolean istZiffer(int Ziffer) {
        boolean ergebnis = false;
        System.out.println("istZiffer: " + Ziffer);
        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;
        }
        System.out.println("Ergebnis: " + ergebnis);
        return ergebnis;
    }
    /* Soll entscheiden ob ein Zeichen eine Ziffer ist oder nicht */
    public static int istVorzeichen(int Ziffer) {
        switch (Ziffer) {

            case '-':   return(-1);
         
            default:
                return(1);
        }
    }
}
```


----------



## JStein52 (7. Sep 2017)

ein paar println's habe ich noch drin bzw. verändert. Das kannst du dir wieder passend machen


----------



## JStein52 (7. Sep 2017)

So wie es gerade ist würde ?123 und ?-123  jeweils als 123 erkannt weil das Vorzeichen das erste Zeichen sein muss.
Wenn du die Abfrage auf i==0 aber weglässt dann ist ?+123 und !-123 etwas unterschiedliches weil als Vorzeichen dann das letzte vor den Ziffern benutzt wird.

Edit:  und die Eingabe +-123 und -+-123  wären dann auch gleich.


----------



## Benutzer187 (7. Sep 2017)

Okay. Danke!!


----------

