# Längstekette



## nuke87 (13. Nov 2016)

Hallo Leute ,
ich muss ein Programm erstellen das die Länge der längsten Kette gleicher natürlichen Zahlen anzeigt.
Zum Beispiel man gibt 1 1 2 2 2 3 3 3 3 4 3 3 1 5 gefolgt mit einem Punkt zum abschliessen der Eingabe, so wäre in diesem Beispiel die Ausgabe 4, weil 4 aufeinander folgende 3 vorhanden sind und das ist die längste Kette. 
Mein Programm spuckt aber irgendwie was anderes immer aus, bei gleicher Zahlenfolge wie oben im Beispiel, kommt bei mir 14 raus. ich weiss nicht warum das so ist. bitte um hilfe.
hier mein code:

```
import java.util.*;

public class Laengstekette{
        public static void main(String[] args){
                Scanner sc = new Scanner(System.in);

                int oldZahl = 0;
                int newkette = 0;
                int i = 0;
               

                while (sc.hasNextInt()){
                         i = sc.nextInt();

                        if ( i == oldZahl)
                                newkette +=1;
                        else
                                oldZahl = i;
                }
                sc.close();

                System.out.println(newkette);
        }
}
```


----------



## Meniskusschaden (13. Nov 2016)

Wenn ich dein Programm mit deinem Beispiel ausführe, erhalte ich nicht 14, sondern 7. Im Moment prüfst du, wieviele Zahlen vorkommen, die mit ihrem Vorgänger übereinstimmen und das sind eben sieben, nämlich die hier mit + gekennzeichneten:

```
1 1 2 2 2 3 3 3 3 4 3 3 1 5
- + - + + - + + + - - + - -
```
Wenn sich die Ziffer ändert, musst du überprüfen, ob die dadurch abgeschlossene Folge länger ist, als die bisher längste und die Zählung für die neue Folge muß wieder bei 1 beginnen.


----------



## nuke87 (13. Nov 2016)

ok erst mal vielen dank, für den tipp. Das ist jetzt mein Problem , wie kann ich das realisieren ? wie stelle ich die überprüfung im code dar, wann sich die ziffer ändert und ob die abgeschlossene Folge länger ist?


----------



## Meniskusschaden (13. Nov 2016)

nuke87 hat gesagt.:


> wie stelle ich die überprüfung im code dar, wann sich die ziffer ändert


Die Prüfung hast du ja schon.


nuke87 hat gesagt.:


> und ob die abgeschlossene Folge länger ist?


Dafür brauchst du eine zusätzliche Variable, in der du die bisher maximale Länge speicherst. Dann kannst du sie mit der Länge der aktuellen Folge vergleichen.


----------



## Xyz1 (13. Nov 2016)

Auch hier wieder ein kleiner Flow chart dazu, der alles verdeutlicht:


----------



## nuke87 (13. Nov 2016)

vielen Dank, aber irgendwie blicke ich da jetzt gar nicht durch
soll es ungefähr so sein?:

```
import java.util.*;

public class LaengsteKette {

   public static void main(String[] args) {
     Scanner sc = new Scanner(System.in);
     int oldzahl = 0;
     int newkette = 0;
     int i = 0;
     int maxlaenge = 0;
     
     while(sc.hasNextInt()) {
       i = sc.nextInt();
       if(i == oldzahl) {
         newkette += 1;
       } else
         oldzahl = i;
       
       if(i > newkette) {
         maxlaenge +=1;
       } else
         i++;
     }
     sc.close();
     System.out.println(maxlaenge);
   }
}
```


----------



## Meniskusschaden (13. Nov 2016)

Du solltest das mal mit vernünftigen Einrückungen formatieren, damit man es besser lesen kann. Ich habe es mir nicht richtig angesehen, aber die Abfrage `if(i > newkette)` kann nicht richtig sein, denn i ist ein Element der Folge und newkette ist eine Länge. Warum sollte man die miteinander vergleichen? Außerdem wird newkette nicht zurück gesetzt, wenn eine neue Folge beginnt.


----------



## AnfängerInfo (2. Nov 2022)

nuke87 hat gesagt.:


> vielen Dank, aber irgendwie blicke ich da jetzt gar nicht durch
> soll es ungefähr so sein?:
> 
> ```
> ...


Eine Frage ist zwar schon eine Zeit vergangen, aber ich wollte fragen ob du die Lösung noch hast, würde mich sehr freuen


----------



## AnfängerInfo (2. Nov 2022)

nuke87 hat gesagt.:


> Hallo Leute ,
> ich muss ein Programm erstellen das die Länge der längsten Kette gleicher natürlichen Zahlen anzeigt.
> Zum Beispiel man gibt 1 1 2 2 2 3 3 3 3 4 3 3 1 5 gefolgt mit einem Punkt zum abschliessen der Eingabe, so wäre in diesem Beispiel die Ausgabe 4, weil 4 aufeinander folgende 3 vorhanden sind und das ist die längste Kette.
> Mein Programm spuckt aber irgendwie was anderes immer aus, bei gleicher Zahlenfolge wie oben im Beispiel, kommt bei mir 14 raus. ich weiss nicht warum das so ist. bitte um hilfe.
> ...


Hallo, ist zwar etwas her, aber ich wollte fragen ob du die Lösung noch hast oder mit dabei kurz helfen könntest


----------



## KonradN (2. Nov 2022)

Mach doch einfach einen neuen Thread, teil uns darin mit, was Du bisher so hast und was Dein Problem ist. Dann kann Dir auch geholfen werden


----------

