Molmassenrechner in Java?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Mal ein Beispiel. Ich hab jetzt nur vier Alkane rein gemacht. Den Rest kannst du nach dem gleichen Muster ergänzen. Das meiste hab ich in ein Enum reingepackt. Alternativ (oder zusätzlich) kannst du natürlich eine HashMap verwenden, um den Benutzer fragen zu können, zu welchem Alkan die Daten angezeigt werden sollen. Und du kannst evtl. noch eine Umrechnung in Gramm hinzufügen. Ich weiß ja nicht, was dein Molmassenrechner am Ende alles können soll.

enum Alkane {
	// Namen, Kohlenstoffatome und Wasserstoffatome definieren
	PROPAN(3, 8),
	BUTAN(4, 10),
	PENTAN(5, 12),
	HEXAN(6, 14);
	
	// Private Variablen, um die Atomanzahlen zu speichern 
	private final int carbon;
	private final int hydrogenium;
	
	// Konstruktor
	Alkane(int carbon, int hydrogenium) {
		this.carbon = carbon;
		this.hydrogenium = hydrogenium;
	}
	
	// Methode, um die Strukturformel anzuzeigen
	public String getFormula() {
		return "C" + carbon + "H" + hydrogenium;
	}
	
	// Methode, um die molare Masse zu berechnen 
	// (mit 12.011 für jedes Kohlenstoffatom und 1.008 für jedes Wasserstoffatom)
	public double getMol() {
		return (12.011 * carbon) + (1.008 * hydrogenium);
	}
	
	// Name der Konstante in Title-Case umwandeln
	public String getName() {
		return this.name().charAt(0) + this.name().substring(1).toLowerCase();
	}
}

public class Molmassen {
	public static void main(String[] args) {
		
		// Beispielhaft alle Alkane ausgeben
		for (Alkane alkan : Alkane.values()) {
			System.out.printf("%s: Strukturformel: %s, molare Masse: %.2f%n", alkan.getName(), alkan.getFormula(), alkan.getMol());
		}
	}
}
Thies696933 
Fragesteller
 25.11.2022, 16:32

Danke hast mir sehr geholfen

1
Thies696933 
Fragesteller
 02.12.2022, 08:09
@daCypher

Kannst du mir vielleicht helfen wie ich da noch einen Scanner einbauen kann um den Nutzer eine Verhältnisformel wie z.B. H5C12 eingeben zu lassen und das Programm dann quasi das Alkan benennt und die molare Masse ausgibt. Das wäre wirklich unfassbar hilfreich. LG

0
daCypher  02.12.2022, 10:12
@Thies696933

Ich hab den Code mal etwas erweitert, damit z.B. auch bei unbekannten Alkanen die Molmasse berechnet werden kann. Das ganze funktioniert jetzt nicht mehr über ein Enum, sondern eine Klasse für die Alkane und eine Liste für die bekannten Alkane.

import java.util.*;
import java.util.regex.*;

class Alkan {
    // Namen, Kohlenstoffatome und Wasserstoffatome definieren
    public static final List<Alkan> ALKANE = List.of(
        new Alkan("Propan", 3, 8),
        new Alkan("Butan", 4, 10),
        new Alkan("Pentan", 5, 12),
        new Alkan("Hexan", 6, 14)
    );
    
    // Private Variablen, um den Namen und die Atomanzahlen zu speichern 
    private final String name;
    private final int carbon;
    private final int hydrogenium;
    
    // Konstruktor
    public Alkan(String name, int carbon, int hydrogenium) {
        this.name = name;
        this.carbon = carbon;
        this.hydrogenium = hydrogenium;
    }
    
    // Methode, um die Strukturformel anzuzeigen
    public String getFormula() {
        return "C" + carbon + "H" + hydrogenium;
    }
    
    // Methode, um die molare Masse zu berechnen 
    // (mit 12.011 für jedes Kohlenstoffatom und 1.008 für jedes Wasserstoffatom)
    public double getMol() {
        return (12.011 * carbon) + (1.008 * hydrogenium);
    }
    
    // Standard Getter
    public String getName() {
        return name;
    }


    public int getCarbon() {
        return carbon;
    }


    public int getHydrogenium() {
        return hydrogenium;
    }
}


public class Molmassen {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);


        // Eingabe in einer Schleife laufen lassen, damit die Frage wiederholt wird, 
        // wenn der Benutzer Unsinn eingibt
        Matcher checkInput;
        do {
            // Verhältnisformel abfragen
            System.out.println("Bitte eine Verhältnisformel (z.B. C5H12) eingeben:");
            
            // Eingabe prüfen
            String inputTxt = scanner.nextLine();
            checkInput = Pattern.compile("C(\\d+)H(\\d+)").matcher(inputTxt);
        } while (!checkInput.matches());
        scanner.close();
        
        // Wenn die Eingabe dem Muster entspricht,
        // die Werte für Kohlenstoff und Wasserstoff extrahieren
        // final, damit die Werte in einem Lambda-Ausdruck verwendet werden können
        final int carbon = Integer.parseInt(checkInput.group(1));
        final int hydrogenium = Integer.parseInt(checkInput.group(2));
        
        // Nach einem Alkan suchen, was den Eingaben entspricht
        Optional<Alkan> optAlkan = Alkan.ALKANE
                .stream()
                .filter(alkan -> alkan.getCarbon() == carbon && alkan.getHydrogenium() == hydrogenium)
                .findAny();
        
        // Je nachdem, ob ein passendes Alkan gefunden wurde, das Ergebnis ausspucken
        if (optAlkan.isPresent()) {
            Alkan alkan = optAlkan.get();
            System.out.printf("%s: Strukturformel: %s, molare Masse: %.2f%n", alkan.getName(), alkan.getFormula(), alkan.getMol());
        } else {
            Alkan alkan = new Alkan("Unbekannt", carbon, hydrogenium);
            System.out.printf("Kein passendes Alkan gefunden. Strukturformel: %s, molare Masse: %.2f%n", alkan.getFormula(), alkan.getMol());
        }
    }
}
1