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);
}
