Molmassenrechner in Java?
Moin
ich würde euch gerne fragen ob jemand von euch einen Ansatz hat wie man einen Molmassenrechner in Java beschränkt auf Alkane programmieren kann? Ein Ansatz würde mir reichen.
Vielen Dank
1 Antwort
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());
}
}
}
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
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());
}
}
}
Danke hast mir sehr geholfen