Moin Leute,
icn bastle mometan aufgrund einer Uniaufgabe an einer Klasse, welche eine Römische Zahl darstellen soll. Hierfür benutze ich Enums. Ich habe die Funktionalität der Klasse soweit ganz gut implementieren können, scheitere aber nun bei der Umsetzung der Anwendung der Subtraktionsregel in meiner toString() Methode. Mir ist es zu stumpf die KI zu fragen, daher wende ich mich erstmal an Euch - Hättet Ihr einen Denkanstoß, welche Logik man nutzen könnte, um die Suntraktionsregel zu beachten? Meinen Code füge ich Euch ein, ich hatte jetzt erstmal daran gedacht, die Paare bei denen es relevant ist (also IV für 4 (statt 5 - 1), IX für 9 (statt 10 - 1), XL für 40 (statt 50 - 10), XC für 90 (statt 100 - 10), CD für 400 (statt 500 - 100), CM für 900 (statt 1000 - 100)) zu identifizieren und dann eine bestimmte Ausnahme zu fomulieren. Aber bei der Umestzung scheitert es aktuell noch...
Danke für Eure Zeit!
icn bastle mometan aufgrund einer Uniaufgabe an einer Klasse, welche eine Römische Zahl darstellen soll. Hierfür benutze ich Enums. Ich habe die Funktionalität der Klasse soweit ganz gut implementieren können, scheitere aber nun bei der Umsetzung der Anwendung der Subtraktionsregel in meiner toString() Methode. Mir ist es zu stumpf die KI zu fragen, daher wende ich mich erstmal an Euch - Hättet Ihr einen Denkanstoß, welche Logik man nutzen könnte, um die Suntraktionsregel zu beachten? Meinen Code füge ich Euch ein, ich hatte jetzt erstmal daran gedacht, die Paare bei denen es relevant ist (also IV für 4 (statt 5 - 1), IX für 9 (statt 10 - 1), XL für 40 (statt 50 - 10), XC für 90 (statt 100 - 10), CD für 400 (statt 500 - 100), CM für 900 (statt 1000 - 100)) zu identifizieren und dann eine bestimmte Ausnahme zu fomulieren. Aber bei der Umestzung scheitert es aktuell noch...
Java:
public enum Roman {
I(1, '\u2160'),
V(5,'\u2164'),
X(10,'\u2169'),
L(50,'\u216C'),
C(100,'\u216D'),
D(500,'\u216E'),
M(1000,'\u216F');
private final int value;
private final char literal;
Roman(int value, char literal) { // eigener Konstruktor
this.value = value;
this.literal = literal;
}
public int getValue() { // Methode
return value;
}
public char getLiteral() {
return literal;
}
}
public class RomanNumber {
int value;
public RomanNumber(int i) {
assert i > 0;
value = i;
}
public RomanNumber(String s) {
assert s != null;
assert !s.isEmpty();
int value = 0;
for (char c : s.toCharArray()) {
Roman r = Roman.valueOf(c + "");
value += r.getValue();
}
this.value = value;
}
public int getValue() {
return value;
}
public String toString() {
StringBuilder b = new StringBuilder();
Roman[] r = Roman.values();
int rest = value;
for (int i = r.length - 1; i >= 0; i--) { // Hier ggf. Anwendnug der Subtraktionsregel
while (r[i].getValue() <= rest) {
b.append(r[i].getLiteral());
rest -= r[i].getValue();
}
}
return b.toString();
}
}
Danke für Eure Zeit!