Übungsblatt 1, Rechnerübung 1

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Übungsblatt 1, Rechnerübung 1
Hi…

also ich hab mich mal als absoluter Java-Anfänger damit befasst und bin bis Teilaufgabe f) gut durchgekommen. Da weiss ich allerdings keinen Rat… :-/

Kann mal jemand seine Lösung hier präsentieren? Wäre kewl…
Ich hab versucht das ganze mit ner do-Schleife zu lösen (so hab ich auch Aufg. e) gelöst), aber das hat net so ganz geklappt… :wand:

Thanx!


hi,

hab nur bis zur f) gemacht. auf iterative loesung hatte ich keinen bock, zuviel zum nachdenken. die sache mit den 2 schleifen ist auch nicht besonders sauber, aber da konnte ich gleich mal verschachtelte breaks ausprobieren. fragen willkommen!

import java.io.*;

public class Ggt2 {
	public int ggtRekursiv (int a, int b) {
		if (b == 0) {
			return a;
		} else {
			if (b > a) {
				return ggtRekursiv (b, a);
			} else {
				return ggtRekursiv (b, a-b);
			}
		}
	}
	
	public static void main (String[] args) {
		Ggt2 ggtBeispiel = new Ggt2 ();
		
		BufferedReader console = new BufferedReader (new InputStreamReader (System.in));
		String text1 = new String ("");
		String text2 = new String ("");
		
		int zahl1 = 0;
		int zahl2 = 0;
		boolean weitermachen = true;
		
		System.out.println ("Zum Aufhören bei der Frage nach Zahl 1 'q' eingeben!\n");
		
		ende:
		while (weitermachen) {
			do {
				try {
					System.out.println ("Zahl 1 eingeben: ");
					text1 = console.readLine ();
					
					System.out.println ("Zahl 2 eingeben: ");
					text2 = console.readLine ();
				} catch (IOException e) {};	
				
				if (text1.equals("q")) {break ende;}
				
				zahl1 = Integer.parseInt (text1);
				zahl2 = Integer.parseInt (text2);
				
				if ((zahl1 > 0) && (zahl2 > 0)) {
					System.out.println ("\nDer ggT von " + zahl1 + " und "
							+ zahl2 + " ist : " +
							ggtBeispiel.ggtRekursiv (zahl1, zahl2) + "\n");
					break;
				}
				System.out.println ("\nBitte zwei positive Zahlen eingeben!\n");
			} while (true);
		}
	}
}

btw@yves: der code-button funktioniert bei mir nicht :(…


mir faellt grad auf,
die variable weitermachen brauch ich gar nicht. das kommt davon, wenn man verschiedene ansaetze auf einmal verfolgt …


habs jetzt auch geschafft…
Danke an Steppenwolf!

Der Tip mit Deiner boolean-variable “weitermachen” ist im Prinzip des Rätsels Lösung… :wink:


Warum machst du die Methode [m]ggtRekursiv[/m] nicht static? Dann bräuchtest du nicht extra mit [m]new[/m]… hantieren.


weil ich das nur von der uebungsangabe abgeaendert habe und das dort nunmal so gemacht ist! wohl, um uns die tolle objektorientierung zu zeigen, die man an diesem beispiel leider ueberhaupt nicht gut sehen kann.

und wie gesagt, die ganzen schleifen sind nicht besonders sauber und schoen, vor allem die endlos-while(true)-schleife und die breaks. vielleicht mach ich das nochmal schoener und poste es dann nochmal.


hier mal meine Version… denke die is ganz schön so - wenn auch lang… :wink:

import java.io.*;


public class Ggt
{
		
	public int ggtRekrusiv (int a, int b)
	{
		if (b == 0)
		{return a;}
		else
		{	if (b > a)
			{return ggtRekrusiv (b, a);}
			else
			{return ggtRekrusiv(b, a-b);}
		}
	}
	
	
	public static void main (String[] args)
	{
		Ggt ggtBeispiel = new Ggt();
	
		BufferedReader console = 
		new BufferedReader (new InputStreamReader(System.in));
		String text1 = new String("");
		String text2 = new String("");
		String goon = new String("");
		
		int zahl1;
		int zahl2;
		boolean quit = true;
		
		while (quit)
		{
			try
			{
				System.out.print ("Zahl1 eingeben: ");
				text1 = console.readLine();
			
				System.out.print ("Zahl2 eingeben: ");
				text2 = console.readLine();
			}
			catch (IOException e) {};
			
			zahl1 = Integer.parseInt (text1);
			zahl2 = Integer.parseInt (text2);
		
			if ((zahl1 < 0) || (zahl2 < 0))
			{
				System.out.print ("\nZahlen duerfen nicht negativ ");
				System.out.println ("sein!\n\n");
			}
			else 
			{
				System.out.println ("\nDer ggT von " + zahl1
									+ " und " + zahl2 + " ist: "
									+ ggtBeispiel.ggtRekrusiv(zahl1, zahl2));
				
				try
				{
					System.out.print ("\n\nSoll noch ein ggT berechnet ");
					System.out.print ("werden? (j/n) ");
					goon = console.readLine();
				}
				catch (IOException e) {};
				if (goon.equals("j"))
				{
					System.out.println ("\n");
				}
				else
				{
					quit = false;
				}
			}
		}
	}	
}