Java :: Aufgabe #129

4 Lösungen Lösungen öffentlich

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

Lösungen:

vote_ok
von manoloForead (390 Punkte) - 11.07.2016 um 19:15 Uhr
Quellcode ausblenden Java-Code
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);

    }
} 
vote_ok
von Awlex (50 Punkte) - 16.07.2016 um 00:56 Uhr
Meine Lösung zu diesem Problem. Ich denke, dass es wohl eher eine Standart lösung ist, aber was solls...
*KGV.java*
Quellcode ausblenden Java-Code
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;
	}
}
vote_ok
von vk_26 (140 Punkte) - 09.11.2016 um 12:43 Uhr
Quellcode ausblenden Java-Code
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));
	}

}
vote_ok
von nOrdan (1160 Punkte) - 23.07.2019 um 18:07 Uhr
Es ist etwas komplizierter geworden, aber es funktioniert und das auch mit sehr großen Zahlen


Main-Klasse:


Quellcode ausblenden Java-Code


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:

Quellcode ausblenden Java-Code

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