Laden...

Schnapszahl finden

Erstellt von Apollo56 vor einem Jahr Letzter Beitrag vor einem Jahr 530 Views
A
Apollo56 Themenstarter:in
13 Beiträge seit 2022
vor einem Jahr
Schnapszahl finden

Hallo,
ich steh seit zwei Tagen total auf dem Schlauch.
Ich soll die in einer Textbox eingegeben ganze Zahl darauf prüfen ob sie eine Schnapszahl ist (111, 222, usw.). Mir fällt kein Ansatz ein wie ich daran gehen könnte. Ich hatte überlegt die eingegeben Zahl in jeweils eine Zahl zu splitten und diese dann mit einander zu vergleichen, aber ich finde keinen Ansatz wie ich das machen kann. Könnte mir jemand im groben auf die Sprünge helfen?

D
261 Beiträge seit 2015
vor einem Jahr

Eine Möglichkeit:

  • Packe alles in eine Funktion mit Rückgabewert Boolean und die Zahl als Parameter vom Typ Integer
  • Zahl in einen String verwandeln
  • Erstes Zeichen aus dem String extrahieren
  • In einer Schleife jedes weitere Zeichen des Strings mit dem ersten Zeichen vergleichen
  • Bei Ungleichheit direkt die Funktion mit "return false" verlassen
  • Wenn die Schleife durchläuft müssen alle Ziffern gleich sein oder es gibt nur eine Ziffer, also die Funktion mit "return true" verlassen;
P
441 Beiträge seit 2014
vor einem Jahr

Vergleichen könntest du sie auf integer Basis (was etwas komplizierter ist, denn der Computer arbeitet auf binarbasis und du willst auf zehner basis vergleichen) oder auf string Basis.

Für den Anfang ist die string Variante vermutlich einfacher. Grob: Wandele die Zahl in einen string um, schaue für jeden char ab dem zweiten ob er gleich dem vorderen ist.

A
Apollo56 Themenstarter:in
13 Beiträge seit 2022
vor einem Jahr

Also ich habe es so gemacht und wenn ich es Debugge und in einer textBox ausgebe funktioniert es auch. Gibt es Verbesserungsvorschläge?


 private bool PruefeSchnapszahl(int schnaps)
        {
            schnaps = Convert.ToInt32(textBox1.Text);
            string zahl = Convert.ToString(schnaps);

            bool istSchnapszahl = true;
            for (int i = 0; i < zahl.Length; i++)
            {
                if(!(zahl[i] == zahl[zahl.Length - 1]))
                {
                    istSchnapszahl=false;
                    break;
                }
            }
            return istSchnapszahl;

3.825 Beiträge seit 2006
vor einem Jahr

Also ich habe es so gemacht und wenn ich es Debugge und in einer textBox ausgebe funktioniert es auch. Gibt es Verbesserungsvorschläge?

Ja, das passt so.

Ich würde es so machen :


private bool PruefeSchnapszahl()
{
    string zahl = Int32.Parse(textBox1.Text).ToString();
    if (zahl.Length < 2) return false;
    for (int i = 1; i < zahl.Length; i++) if (zahl[i] != zahl[0]) return false;
    return true;
}

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

4.931 Beiträge seit 2008
vor einem Jahr

Nein, passt nicht ganz:


private bool PruefeSchnapszahl(int schnaps)
{
    schnaps = Convert.ToInt32(textBox1.Text);
    string zahl = Convert.ToString(schnaps);
    // ...
}

Erst wird eine Zahl als Parameter übergeben, und dann sofort wieder neu zugewiesen, um anschließend wieder in einen Text umgewandelt zu werden!?!
Besser den Text (oder die schon umgewandelte Zahl) übergeben:


private bool PruefeSchnapszahl(string zahl)
{
    // ...
}

(und Aufruf dann mittels PruefeSchnapszahl(textBox1.Text))
bzw.


private bool PruefeSchnapszahl(int schnaps)
{
    string zahl = schnaps.ToString();
    // ...
}

S
11 Beiträge seit 2021
vor einem Jahr

Lass den Inhalt der Textbox in einen Integer wandeln. Dann folgende Abfrage über Modulo:


if(INTEGER % 111 == 0 && INTEGER > 99)
{
    *machWas
}

Grüße Stoffel

4.931 Beiträge seit 2008
vor einem Jahr

Das paßt aber nur für 3-stellige Zahlen, keine 2-stelligen (= Alter) oder größere (wie z.B. 3333 oder 55555).

S
11 Beiträge seit 2021
vor einem Jahr

Das ist richtig. Aber in der Beschreibung von Apollo56 ist nur die Rede von 111, 222 usw.
Von daher bin ich davon ausgegangen dass nur dreistellige gemeint sind.