Hallo und einen schönen Sonntag!
Aus Übungszwecken habe ich mal eine Methode geschrieben, die den größten gemeinsamen Teiler von (beliebig vielen) Integern bestimmt.
Dazu habe ich eine Hilfsmethode geschrieben, die prüft ob eine Zahl ein Teiler aller übrigen Zahlen ist. Unten stelle ich ein paar Fragen zu meinem Code. Es ist mir klar, dass es bestimmt schöner geht, aber das ist so eine Möglichkeit, die ich ohne Hilfe aufschreiben konnte.
Fragen:
Zeile 21: Hier definiere ich eine Variable memory, damit ich mir beim Durchlaufen des Arrays irgendwie merken kann, ob teiler ein Teiler eines Array-Eintrags ist. Geht das irgendwie schöner?
Zeile 43-44: Hier sortiere ich zunächst das Array numbers (aufsteigend), damit ich den dann neuen ersten Eintrag als den kleinsten Wert extrahieren kann (denn so groß kann der ggT ja maximal sein). Gibt es einen direkten Weg um den kleinsten Wert in einem Array zu erhalten? Ich habe nichts finden können.
Aus Übungszwecken habe ich mal eine Methode geschrieben, die den größten gemeinsamen Teiler von (beliebig vielen) Integern bestimmt.
Dazu habe ich eine Hilfsmethode geschrieben, die prüft ob eine Zahl ein Teiler aller übrigen Zahlen ist. Unten stelle ich ein paar Fragen zu meinem Code. Es ist mir klar, dass es bestimmt schöner geht, aber das ist so eine Möglichkeit, die ich ohne Hilfe aufschreiben konnte.
Java:
import java.util.Arrays;
public class ggT {
public static void main(String[] args) {
System.out.println(determineGGT(10, 7)); /* Einige Tests */
System.out.println(determineGGT(202, 14, 28));
System.out.println(determineGGT(40,20,30,220,120,100,1500));
}
/**
* Testet ob
*
* @param teiler Teiler von allen Zahlen in
* @param numbers ist und gibt
* @return boolean zurück.
*/
public static boolean isDivisorOfAll(int teiler, int... numbers) {
boolean isDivisor = false;
boolean memory = true;
for (int number : numbers) {
if (number % teiler == 0 && memory == true) {
isDivisor = true;
}
else {
memory = false;
isDivisor = false;
}
}
return isDivisor;
}
/**
* Bestimmt den größten gemeinsamen Teiler der Zahlen in
* @param numbers
* @return ggT
*/
public static int determineGGT(int... numbers) {
Arrays.sort(numbers); /* Sortiere aufsteigend */
int minVal = numbers[0]; /* kleinster Parameterwert; ggT kann höchst diesen Wert annehmen */
int result = 1;
for (int teiler = 1; teiler <= minVal; teiler++) { /* prüfe ob die Zahlen zwischen 1 (inklusive) und minVal (inklusive) */
if (isDivisorOfAll(teiler, numbers) == true) { /* Teiler aller Zahlen in numbers sind. */
result = teiler;
}
}
return result;
}
}
Fragen:
Zeile 21: Hier definiere ich eine Variable memory, damit ich mir beim Durchlaufen des Arrays irgendwie merken kann, ob teiler ein Teiler eines Array-Eintrags ist. Geht das irgendwie schöner?
Zeile 43-44: Hier sortiere ich zunächst das Array numbers (aufsteigend), damit ich den dann neuen ersten Eintrag als den kleinsten Wert extrahieren kann (denn so groß kann der ggT ja maximal sein). Gibt es einen direkten Weg um den kleinsten Wert in einem Array zu erhalten? Ich habe nichts finden können.