Benutzereingaben, Schleifendurchläufe zählen

Guten Abend, ich habe eine Aufgabe erhalten, die ich nicht komplett lösen kann.
Aufgabestellung: Schreiben Sie ein Programm, das zwei Zahlen einliest.
Stellen Sie sicher, dass die eine Zahl größer als die andere Zahl. Lassen Sie dazu gegebenenfalls die Eingabe wiederholen. Erstellen Sie dann eine Schleife, die von der kleineren Zahl bis zur größeren Zahl durchläuft und die Anzahl der Durchläufe ermittelt.
Hinweis: Die Reihenfolge der Eingabe soll beliebig sein. Es kann also auch erst die größere Zahl eingegeben werden und dann die kleinere.

Mein Lösungsvorschlag:

public class ZahlCounter {

	public static float zahl1, zahl2;
	
	public static void main(String[] args) {

		//Zahlen einlsen
		einlesen();
		//Anzahl der Durchläufe ausgeben.
		counter();
		
		System.exit(0);
		}

		
			//Zahlen einlesen
			public static void einlesen() {
				
				zahl1 = Float.parseFloat(JOptionPane.showInputDialog("Bitte geben Sie die erste Zahl ein:"));
				zahl2 = Float.parseFloat(JOptionPane.showInputDialog("Bitte geben Sie die zweite Zahl ein:"));
				
				if ((zahl1 < zahl2) || (zahl2 < zahl1)) {
					System.out.println("Die erste Zahl lautet:"+zahl1);
					System.out.println("Die zweite Zahl lautet:"+zahl2);
				}
				else {
					System.out.println("Sie haben zwei Mal die gleiche Zahl eingegeben!Bitte geben Sie zwei unterschiedliche  Zahlen ein.");
					}		
				
				}
			//Anzahl der Durchläufe ermitteln.
			public static void counter( ) {
				int count1 = 0;
				int count2 = 0;
			
				while (zahl1 < zahl2) {
					count1 = count1 + 1;
				}
				while(zahl1 > zahl2) {
					count2 = count2 + 1;
				}
				int ergebnis = count1 + count2;
				System.out.println(ergebnis);
			}			
	}

Sieht vom Ansatz her soweit gut aus, verschiedene Funktionalitäten in Methoden ausgelagert (hier kann man streiten dass ja alles static ist, aber man kann Dinge auch übertreiben).

Ansonsten, Programm mal ausgeführt? Dann dürfte sehr schnell eine Sache auffallen. (Tipp: In der counter Methode)

P.s. System.exit(0); kann man weglassen

1 „Gefällt mir“

Das Teilen in Methoden ist schon gut, aber Du solltest es auch konsequent machen. Wenn Du schon eine Methode eingabe() hast sollte es auch eine Methode ausgabe() geben.

Zudem: wenn Du die Eingabe über eine GUI anforderst solltest Du auch für die Ausgabe eine GUI nutzen.

bye
TT

Hallo, irgendwie hat die Methode counter ein Fehler, jetzt habe ich eine endlose Schleife programmiert.

                public static void counter() {
					
					int count1 = 0;
					int count2 = 0;
					
					while(true) {
						if(zahl1 < zahl2) {
							count1 = count1 + 1;
						}else {
							count2 = count2 + 1;
						}
						System.out.println("Anzahl der Durchläufe:"+(count1+count2));						
					}
				}

Wenn ich den Aufgabentext in Code „übersetze“ könnte dieser so aussehen:

import java.util.Scanner;

public class Test {

   public Test() throws java.util.InputMismatchException {
      Scanner scan = new Scanner(System.in);
      
      System.out.print("Gib bitte zwei nicht identische ganze Zahlen ein!\nErste Zahl: ");
      int firstNumber = scan.nextInt();
      
      System.out.print("Zweite Zahl: ");
      int secondNumber = scan.nextInt();
      
      while(firstNumber == secondNumber) {
	 System.out.print("Die Zahlen dürfen nicht identisch sein. Versuche es nochmal!\nZweite Zahl: ");
	 secondNumber = scan.nextInt();
      }
      scan.close();

      int counter = 0;
      if(firstNumber < secondNumber) {
	 counter = loops(firstNumber, secondNumber);
      } else {
	 counter = loops(secondNumber, firstNumber);
      }      

      System.out.println("Es wurden "+counter+" Schleifendurchläufe gezählt.");
   }

   private int loops(int smallerNumber, int largerNumber) {
      int counter = 0;
      for(int i = smallerNumber; i < largerNumber; i++) {
	 counter++;
      }

      return counter;
   }

   public static void main(String[] args) {
      try {
	 new Test();
      } catch(java.util.InputMismatchException ex) {
	 System.out.println("Fehler: Die letzte Eingabe war keine ganze Zahl!");
      }
   }
}

Vielen Dank! Die Aufgabe habe ich auch verstanden. Die Scanner Klasse ist eine tolle Sache.
Die Aufgabe haben Sie super gelöst.

Was das jetzt mit „Vokalen und Konsonanten“ zu tun hat…?

Wie auch immer. Früher oder später kann es hilfreich sein, wenn man lernt, wie man so ein Programm im Debugger laufen läßt.

(Mit einem Debugger kann man das Programm Zeile für Zeile abarbeiten lassen, und zuschauen, wie sich die Variablenwerte verändern. Zugegeben, für mich ist es immer (noch?) ein kleines persönliches „Scheitern“, wenn ich wirklich den Debugger anwerfen muss, aber … gerade bei fremdem Code kann es hilfreich sein…)

Bis dahin… kann man auch mit System.out.println ein bißchen debuggen. Wenn man z.B. einfügt

				while (zahl1 < zahl2) {
                    System.out.println("So, " + zahl1 + " is kleiner als " + zahl2 + ", deswegen wird jetzt " + count1 + " um 1 erhöht");
					count1 = count1 + 1;
				}

und dann z.B. 5 und 8 eingibt, sieht man…

Die erste Zahl lautet:5.0
Die zweite Zahl lautet:8.0
So, 5.0 is kleiner als 8.0, deswegen wird jetzt 0 um 1 erhöht
So, 5.0 is kleiner als 8.0, deswegen wird jetzt 1 um 1 erhöht
So, 5.0 is kleiner als 8.0, deswegen wird jetzt 2 um 1 erhöht
So, 5.0 is kleiner als 8.0, deswegen wird jetzt 3 um 1 erhöht
So, 5.0 is kleiner als 8.0, deswegen wird jetzt 4 um 1 erhöht
So, 5.0 is kleiner als 8.0, deswegen wird jetzt 5 um 1 erhöht
So, 5.0 is kleiner als 8.0, deswegen wird jetzt 6 um 1 erhöht
...

Jup. count1 und count2 haben mit zahl1 und zahl2 nichts zu tun…

Nun gibt es 1000 Möglichkeiten, das Problem zu lösen. Die einfachste wäre eben, die beiden count-Variablen wegzulassen und durch zahl zu ersetzen (auch wenn das in mancher anderer Hinsicht nicht „schön“ ist). Aber … das kriegst du schon hin.

1 „Gefällt mir“

Tut mir leid wegen falschem Überschrift, war stark erkältet, eigentlich immer noch. Die Aufgabe setze ich auch bald ein , da ich Schwerigkeiten habe. Nochmals vielen Dank für …Unterstützung.