# kgV



## DoublexD (29. Apr 2012)

Hallo, 
ich arbeite im Moment in Eclipse an einem Programm, dass den kgV (=kleinsten gemeinsamen Teiler) zweier eingegebener Zahlen bestimmt (aber auf relativ niedrigem Niveau, da ich erst Anfänger bin).
Hier mein Script:

```
public class kgV {

	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
		
		private static int min(int a, int b)
		{
			if (a <= b)
			return a;
			else 
			return b;
				
		}
		
		private static int ggT(int i, int y)
		{
			int ggT=1;
			for (int t=1; t<= min(a,b); t++)
			{
				if (a%t==0)
				if (b%t==0)
				ggT=t;
			}
			return ggT;
		}
		private static int kgV(int a, int b)
		{
			kgV = ((a*b) : ggT) ;
		}
	System.out.println("Das kleinste gemeinsame Vielfache von"+ int a+ "und" + int b "ist" + int kgV + ".")
	}

}
```

Es kamen jetzt mehrere Fehlermeldungen, die ich mit meinem Anfängerwissen, aber nicht verstanden habe. Könnt ihr mir vielleicht sagen, wo meine Fehler sind und sie mir auch kurz erklären? 
Danke für eure Mühen :toll:
LG JM
PS: Ich habe da immer private static int  geschrieben, weil ich das so auch im Internet gefunden habe und ich mich an den Vorlagen bisschen orientiert habe, aber warum muss da überhaupt "private und static" hin? :bahnhof:


----------



## Gast2 (29. Apr 2012)

Methode in Methode ist unzulässig.



> aber warum muss da überhaupt "private und static" hin?


private ist ein modifier und sagt dass die Methode nur von innerhalb der Klasse aufgerufen werden darf. Ist aber hier nicht zwingend nötig.
zum thema static: http://www.java-forum.org/stichwort-static/1353-bedeutet-static.html


----------



## turtle (29. Apr 2012)

Wie EikeB schon geschrieben hat, sind Deine Methoden  min, ggT und kgV innerhalb von main() unzulässig. 

Desweiteren solltest Du Klassennamen mit einem GROSS-Buchstaben beginnend benennen (also zum Beispiel KGV) und Methoden sollten mit einem Verb beginnen (also zum Beispiel berechneKGV oder getMinimum).


----------



## Fant (30. Apr 2012)

```
private static int kgV(int a, int b) {
    kgV = ((a*b) : ggT) ;
}
```

- es fehlt ein return-Statement
- "geteilt durch" schreibt man in Java mit einem "/"
- Du rufst die Methode ggT auf, aber übergibst keine Parameter



```
private static int kgV(int a, int b) {
    int kgV = ( (a*b) / ggT(a,b) );
    return kgV;
}
```

Außerdem ist deine Methode den ggT zu berechnen äußerst ineffizient. Schau dir mal Euklidischer Algorithmus ? Wikipedia an.

Gruß Fant


----------



## HimBromBeere (30. Apr 2012)

```
kgV
```
?! kleines gemeinsames Vielfaches???

Das, was du suchst, ist der ggT (größter gemeinsamer Teiler), denn der kleinste ist bekanterweise immer 1


----------



## Dekker (30. Apr 2012)

HimBromBeere hat gesagt.:


> ```
> kgV
> ```
> ?! kleines gemeinsames Vielfaches???
> ...



oO? Was er macht stimmt schon so. Er sucht das kleinste gemeinsame Vielfache. Wie kommst du darauf das das immer 1 ist? Sagen wir zum Beispiel a = 15 und b = 20, dann ist ggT = 5 und kgV = 60.

Er hat halt einfach Syntaxfehler im Code. Wobei man den ggT effizienter über den euklidischen Algorithmus berechnen kann, als durch stupides ausprobieren.


----------



## langhaar! (30. Apr 2012)

HimBromBeere hat gesagt.:


> Das, was du suchst, ist der ggT (größter gemeinsamer Teiler), denn der kleinste ist bekanterweise immer 1



Der kleinste, ganzzahlige gemeinsame Teiler ist immer 1. Das ist richtig.
Es wird aber kein kleinster Teiler, sondern ein kleinstes *Vielfaches* gesucht. :rtfm:


----------

