Java :: Aufgabe #129
4 Lösungen

Bestimmung des kleinsten gemeinsamen Vielfachen (kgV)
Anfänger - Java
von Nachbar
- 09.07.2016 um 10:08 Uhr
Schreibe ein Programm zur Bestimmung des kgV zweier natürlicher Zahlen (siehe Beispiel zur kgV-Berechnung). Die Berechnung soll ohne Beteiligung des größten gemeinsamen Teilers erfolgen.
Beispielausgabe:
Zahl 1: 5
Zahl 2: 7
kgV: 35
Beispielausgabe:
Zahl 1: 5
Zahl 2: 7
kgV: 35
Lösungen:

import java.util.Scanner; public class main { public static void main (String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Bitte 1. Zahl eingeben: "); int z1 = scanner.nextInt(); System.out.print("Bitte 2. Zahl eingeben: "); int z2 = scanner.nextInt(); int z1temp = z1; int z2temp = z2; while (z1temp != z2temp) { if (z1temp < z2temp) { z1temp += z1; } else { z2temp+= z2; } } System.out.println("KGV: " + z1temp); } }
Meine Lösung zu diesem Problem. Ich denke, dass es wohl eher eine Standart lösung ist, aber was solls...
*KGV.java*
Java-Code
*KGV.java*

public class KGV { public static void main(String[] args) { args = new String[]{"5", "47"}; if (args.length != 2) { System.out.println("Benutzung: java KGV n1 n2"); System.exit(-1); } int x = 0, y = 0; try { x = Integer.valueOf(args[0]); y = Integer.valueOf(args[1]); } catch (NumberFormatException e) { System.out.println("Eines der Argumente oder beide Argumente bestehen " + "nicht aus einer Zahl"); } System.out.println("KGV von " + args[0] + " und " + args[1] + ": " + kgv(x, y)); } public static int kgv(int x, int y) { if (x < 0 || y < 0) return -1; if (x == y) return x; if (x == 1) return y; if (y == 1) return x; int x1 = x, y1 = y; while (x != y) { if (x < y) x += x1; else y += y1; } return x; } }

public class KgV { public static void main(String[] args) { Scanner meinScanner = new Scanner(System.in); System.out.print("Eingabe1: "); long zahl1 = meinScanner.nextInt(); if (zahl1 == 0) { System.out.println("Fehler! Bitte geben sie eine Zahl grösser 0 ein!"); System.exit(0); } System.out.print("Eingabe2: "); long zahl2 = meinScanner.nextInt(); if (zahl2 == 0) { System.out.println("Fehler! Bitte geben sie eine Zahl grösser 0 ein!"); System.exit(0); } System.out.println("Ausgabe kgV:" + zahl1 * (zahl2 / ggT(zahl1, zahl2))); meinScanner.close(); } static long ggT(long zahl1, long zahl2) { if (zahl1 == zahl2 | zahl2 == 0) return zahl1; else return ggT(zahl2, zahl1 % zahl2); } static long kgV(long zahl1, long zahl2) { return zahl1 * (zahl2 / ggT(zahl1, zahl2)); } }
Es ist etwas komplizierter geworden, aber es funktioniert und das auch mit sehr großen Zahlen
Main-Klasse:
Java-Code
Methoden aus meiner Methodensammlung:
Java-Code
Main-Klasse:

import java.math.BigInteger; import Methodensammlung.Methoden; /** * Schreibe ein Programm zur Bestimmung des kgV zweier natürlicher Zahlen (siehe Beispiel zur kgV-Berechnung). Die Berechnung soll ohne Beteiligung des größten gemeinsamen Teilers erfolgen. * * Beispielausgabe: * * Zahl 1: 5 * Zahl 2: 7 * * kgV: 35 * * @author (nOrdan) * @version (23.07.2019) */ public class KGV { Methoden m = new Methoden(); public static void main(String [] args) { KGV kgv = new KGV(); kgv.inputs(); } private void inputs() { boolean valid1 = false; BigInteger zahl1 = new BigInteger("0"); BigInteger zahl2 = new BigInteger("0"); while (valid1 == false) { String input1 = m.userInput("Geben sie die erste Zahl ein"); m.errorStringInput(input1); if (input1.matches("[0-9]+")) { zahl1 = zahl1.add(new BigInteger(input1)); break; } else { m.errorMessage("Ihre Eingabe enthält ungültige Zeichen","Ungültiges Zeichen"); continue; } } while (valid1 == false) { String input2 = m.userInput("Geben sie die zweite Zahl ein"); m.errorStringInput(input2); if (input2.matches("[0-9]+")) { zahl2 = zahl2.add(new BigInteger(input2)); break; } else { m.errorMessage("Ihre Eingabe enthält ungültige Zeichen","Ungültiges Zeichen"); continue; } } berechnen(zahl1,zahl2); } public void berechnen(BigInteger zahl1, BigInteger zahl2) { boolean valid1 = false; BigInteger kleineAddition = new BigInteger("0"); BigInteger großeAddition = new BigInteger("0"); if (zahl1.compareTo(zahl2) == 1) { großeAddition = new BigInteger(zahl1.toString()); kleineAddition = new BigInteger(zahl2.toString()); zahl2 = großeAddition; zahl1 = kleineAddition; } else if (zahl1.compareTo(zahl2) == -1) { großeAddition = new BigInteger(zahl2.toString()); kleineAddition = new BigInteger(zahl1.toString()); } else { großeAddition = new BigInteger(zahl1.toString()); kleineAddition = new BigInteger(zahl2.toString()); m.informationMessage("Das kleinste gemeinsame Vielfache von " + kleineAddition + " und " + großeAddition + " beträgt: " + zahl1,"kgV gefunden"); System.exit(0); } while (valid1 == false) { if (zahl1.compareTo(zahl2) == 0) { break; } else { zahl2 = zahl2.add(großeAddition); } while(zahl1.compareTo(zahl2) == -1) { zahl1 = zahl1.add(kleineAddition); } } m.informationMessage("Das kleinste gemeinsame Vielfache von " + kleineAddition + " und " + großeAddition + " beträgt: " + zahl1,"kgV gefunden"); } }
Methoden aus meiner Methodensammlung:

public String userInput(String message) { return JOptionPane.showInputDialog(message); } public void errorStringInput(String input) { if (input == null) { System.exit(0); //Drückt der User auf abbrechen wird null zurück gegeben und das Programm wird beendet } else if (input.isEmpty() == true) { informationMessage("Da sie nichts eingegeben haben wird auch nichts ausgegeben","No input"); System.exit(0); } } public void errorMessage(String message,String errorName) { JOptionPane.showMessageDialog(null,message,errorName,JOptionPane.ERROR_MESSAGE); } public void informationMessage(String message,String informationName) { JOptionPane.showMessageDialog(null,message,informationName,JOptionPane.INFORMATION_MESSAGE); }