Simple Java Modulo Aufgabe wer kann mir helfen?

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet
  • aus der for-Schleife würde ich while(x>0) machen, sieht erstens besser aus, zweitens verpasst du bei >10 die letzte (höchstwertigste) Ziffer
  • das x=x / 10 muss aus dem if raus, dass muss er natürlich immer machen, auch wenn die Ziffer keine 2 ist. So ist das eine schöne Endlosschleife....
  • da du drei aufeinanderfolgende 2en haben willst, braucht das if einen else-Zweig mit summe=0, damit es bei einer nicht-2 die Zählung zurücksetzt
  • In der Schleife braucht es ein weiteres if: "if (summe==3) return true" da ansonsten 3er Gruppen nur am Anfang der Zahl erkannt werden
Woher ich das weiß:Studium / Ausbildung – Informatiker

Nichtsnutz12 
Beitragsersteller
 24.07.2019, 20:32

ok aber x wird doch nie 0 das würde endlos schleife ergeben weil wir ja Immer durch 10 teilen, Beispiel:

23 / 10 = 2;

2 / 10 = 0? ääääähhh vllt klappts ja doch danke!!!!

0

Da gibt es etliche Möglichkeiten. Die Modulo Lösungen wurden dir ja schon gepostet. Natürlich kannst du sowas auch einfach als String behandeln:

public boolean hat222(int x) {
    return String.valueOf(x).indexOf("222") != -1;
}

Was da letztlich effizienter ist müsste man testen und die Frage ist natürlich auch immer wie oft man sowas aufruft usw. So ist es halt ein nobrainer und leicht zu verstehen und umzusetzen.

Woher ich das weiß:Berufserfahrung – Softwareentwickler/Projektleiter seit 2012

Nichtsnutz12 
Beitragsersteller
 24.07.2019, 22:20

warum geht mein for schleife nicht

0
Nichtsnutz12 
Beitragsersteller
 24.07.2019, 22:20

warum nutzt du String.valueOf(x) was ist der unterschied davon zu Integer.toString(x)?

0
apachy  24.07.2019, 22:51
@Nichtsnutz12

Sollte aufs Gleiche rauskommen in dem Fall. Meine da gibt es nur marginale Unterschiede bzgl. null. Ist hier ja egal, da dort steht, dass wir davon ausgehen können, dass x >= 0 ist.

1
int count = 0;
while(x > 0){
  if(x % 10 == 2){
    count = (count < 3?count+1:3);
  }else{
    count = 0;
}
x /= 10;
}
return count >= 3;

So sollte es (noch ungetestet) funktionieren.


Nichtsnutz12 
Beitragsersteller
 24.07.2019, 20:06

geht das net mit for schleife?

0
Destranix  24.07.2019, 20:07
@Nichtsnutz12

Du kannst ein while auch in ein for umschreiben und andersherum. Das wäre mit for:

int count = 0;
for(;x > 0;x /= 10){
  if(x % 10 == 2){
    count = (count < 3?count+1:3);
  }else{
    count = 0;
}
}
return count >= 3;
1