Formeln analysieren

  • Themenstarter Themenstarter newtojava
  • Beginndatum Beginndatum
N

newtojava

Hallo!
Ich bin noch nicht lange mit Java vertraut und muss nun eine aufgabe lösen:
Write a program that calculates the frequency of any single-letter chemical element in a formula.
The EBNF description for valid formul is:
Code:
formula = part { part }.
part = element [ subscript ].
element = "H" | "B" | "C" | "N" | "O" | "F" | "P" | "S" | "K" | "V" | "Y" | "I" | "W" | "U".
subscript = digit { digit }.
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9".
Display the frequency of each element (in ascending order of atomic number, only if greater than
0):
> Please enter a formula: CH4
H: 4
C: 1
> Please enter a formula: CO2
C: 1
O: 2
> Please enter a formula: C6H12O6
H: 12
C: 6
O: 6
> Please enter a formula: CH3CH3
H: 6
C: 2
ich hab schon was herumprobiert usw. und irgendetwas passt nicht mit meinem code. Nun wollte ich fragen ob mir jemand helfen kann und mir meinen Fehler korrigieren kann.

lg

mein code:
//Test case:
//CH4:
//CO2:
//BF3:
Java:
public class analyseformula {
static String[]atomNames = {"H", "B", "C", "N", "O", "P", "S", "K", "V", "Y", "I", "W", "Sm", "U"}; 

static int positionOfAtoms (char name){
	for(int i=0;i<atomNames.length; i++){
		
	}return -1;
	}//Ende positionOfAtoms
  public static void main (String[]args){
		int []frequencies = new int [atomNames.length];
		Out.print("Please enter a formula: ");
		while(true){
			char ch=In.read();
			if(ch=='\n');
			continue;
			if (ch==In.eof){ //hier zeigts mir ständig eine fehlermeldung
				return;
			}
			int position = positionOfAtoms(ch);
			
			if(position<0){
				Out.println("Unknown atom: "+ch);
			}
			int subscript=In.readInt();
			if(!In.done()){
				subscript=1;
			}
			frequencies[position]+=subscript;
			
			for(int i=0;i<atomNames.length; i++){
				if (frequencies[i]>0){
					Out.print(atomNames[i]+" : "+ frequencies[i]);
				}
			}
		}
 }//Ende main	
	
}//Ende class
 
Zuletzt bearbeitet von einem Moderator:
Was für eine Fehlermeldung bekommst du?

Hast du schonmal überlegt dir deine Formel komplett einzulesen und diesen String dann auszuwerten? z.B. so:

Java:
public String getFormula() {
		BufferedReader In = new BufferedReader(new InputStreamReader(System.in));
		System.out.println("> Please enter a formula: ");
		String zeile = null;
		try {
			zeile = In.readLine();
		}
		catch (IOException e) {
			e.printStackTrace();
		}
		return zeile;
	}

Ich weiß leider nicht, welche Methoden dir von Java vertraut sind, aber ich denke für die Auswertung könnte man recht schnell und einfach auch etwas gutes mit regulären Ausdrücken zusammenbasteln, was sicherlich guten Eindruck macht ;)
 
Zuletzt bearbeitet:
Wir müssen ja eclipse verwenden und mir schreibt er dann das es ein unreachabel code ist.

Ich weiß leider auch nicht ob der anfang nach dem while schon falsch ist...
 
Hi.
Java:
			if(ch=='\n');
			continue;
			if (ch==In.eof){ //hier zeigts mir ständig eine fehlermeldung
				return;
			}
Dein Code ist äquivalent zu:
Java:
if (ch == '\n') {
  // tue nichts....
}
continue;

if (ch==In.eof){ // dieser Code kann nie ausgeführt werden
	return;
}
Achte auf die Einrückung deines Codes (Strg+Umschalt+F in Eclipse rückt automatisch ein), dann siehst du auch gleich in welchem Block die Anweisungen stehen und das das continue nicht zu der if-Anweisung davor gehört.

Gruß
 
Zurück