2016-04-17 21 views
0

Ich bin wirklich neu in der Informatik und ich weiß, dass ich wahrscheinlich sehr einfache Fehler mache. Ich mache ein Programm, um Zahlen in römische Ziffern umzuwandeln, und meine 'vorherige' Variable funktioniert einfach nicht.Konvertieren von Dezimal in römische Ziffer in Java?

Zur Verdeutlichung bearbeiten: Jede Zahlenkombination nach V (X, L, C, D, M) ist über der Marke. Außerdem behandelt meine Ausgabe die Eingabe vorwärts und rückwärts. Ex: (IV = 6)

Hier sind mein Code:

import java.util.*; 

public class roman 
{ 
    public static void main(String[] args) 
    { 
     Scanner in = new Scanner(System.in); 
     System.out.print("Enter a Roman numeral: "); 
     String R = in.nextLine(); 
     System.out.println("Converted to Decimal: " + RomanToDecimal(R)); 
    } 

    static int RomanToDecimal(String R) 
    { 
     int Decimal = 0; 
     char Previous; 

     for (int x = 0; x < R.length(); x++) 
     { 
      Previous = R.charAt(x); 
      if(R.charAt(x) == 'I') 
       Decimal += 1; 

      if(R.charAt(x) == 'V') 
      { 
       if (Previous == 'I') 
        Decimal -= 1; 
       else 
        Decimal += 5; 
      } 

      if(R.charAt(x) == 'X') 
      { 
       if (Previous == 'I') 
        Decimal-= 1; 
       else 
        Decimal+= 10; 
      } 

      if(R.charAt(x) == 'L') 
      { 
       if (Previous == 'X') 
        Decimal -= 10; 
       else 
        Decimal+=50; 
      } 

      if(R.charAt(x) == 'C') 
      { 
       if (Previous == 'X') 
        Decimal -= 10; 
       else 
        Decimal += 100; 
      } 

      if(R.charAt(x) == 'D') 
      { 
       if (Previous == 'C') 
        Decimal -= 100; 
       else 
        Decimal += 500; 
      } 

      if(R.charAt(x) == 'M') 
      { 
       if (Previous == 'C') 
        Decimal -= 100; 
       else 
        Decimal+= 1000; 
      } 

      Previous = R.charAt(x); 
     } 

     return Decimal;  
    } 
} 
+0

Ich habe so etwas in meine 'for' -Schleife geschrieben, aber das Programm gibt immer noch die gleiche Nummer hin und her. Ich weiß, dass die 'R.charAt()' ist für die Position, aber ich bin mir nicht sicher, wie Sie den Code auf eine Weise schreiben, dass das Programm eine Zahl vor einer anderen registriert. – user6217303

+0

'Zurück = x> 0? R.charAt (x - 1): '\ 0'' oder ähnlich. Sie müssen "ein Zeichen zurück" gehen, aber auch den Fall behandeln, in dem Sie sich beim ersten Zeichen in der Zeichenfolge befinden, und können daher nicht zurückgehen. –

Antwort

0

Dies ist der Code korrigiert:

import java.util.Scanner; 

public class Main { 
    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 
     System.out.print("Enter a Roman numeral: "); 
     String R = in.nextLine(); 
     System.out.println("Converted to Decimal: " + RomanToDecimal(R)); 
    } 

    static int RomanToDecimal(String R) { 
     int Decimal = 0; 
     char Previous = 0; 

     for (int x = 0; x < R.length(); x++) { 
      if (R.charAt(x) == 'I') 
       Decimal += 1; 

      if (R.charAt(x) == 'V') { 
       System.out.println(Previous); 
       if (Previous == 'I') { 
        Decimal -= 2; 
       } 
       Decimal += 5; 
      } 

      if (R.charAt(x) == 'X') { 
       if (Previous == 'I') { 
        Decimal -= 2; 
       } 
       Decimal += 10; 
      } 

      if (R.charAt(x) == 'L') { 
       if (Previous == 'X') { 
        Decimal -= 20; 
       } 
       Decimal += 50; 
      } 

      if (R.charAt(x) == 'C') { 
       if (Previous == 'X') { 
        Decimal -= 20; 
       } 
       Decimal += 100; 
      } 

      if (R.charAt(x) == 'D') { 
       if (Previous == 'C') { 
        Decimal -= 200; 
       } 
       Decimal += 500; 
      } 

      if (R.charAt(x) == 'M') { 
       if (Previous == 'C') { 
        Decimal -= 200; 
       } 
       Decimal += 1000; 
      } 
      Previous = R.charAt(x); 
     } 
     return Decimal; 

    } 
} 

Sie rechneten nicht gut auf das Verhalten, wenn vorherige Zeichen angezeigt wird, nicht nur die vorherige hinzugefügt zu diskontieren wollen, aber Sie wollen die gleiche Anzahl von den zu diskontieren Das nächste Zeichen muss also zweimal diskontiert werden.

+0

Danke, das funktioniert tatsächlich perfekt soweit ich sehen kann. Allerdings habe ich die System.out.println (Previous); entfernt. – user6217303

+0

Hoppla, tut mir leid, das habe ich vom Debuggen vergessen. – Hellzzar

1

Dies ist nur ein einfacher Logikfehler.

Wenn wir durch den Code Schritt für Schritt mit einem Beispiel Eingabe von IX ausführen, können wir sehen, dass das erste Zeichen gelesen in I ist, die den Wert von Dezimal verursacht dann um 1 erhöht werden, wenn wir lesen, in X, ziehen wir 1 von Dezimal ab und machen es zu Null.

Das bedeutet, dass das Programm 0 für den Eingang IX ausgibt.

Wir sollten überdenken, wie dieses Programm läuft.

+0

"10 wird dann hinzugefügt." Eigentlich ist es nicht - näher zu lesen. –

+0

Ah natürlich, tut mir leid - lehrt mich zum Lesen! Angenommen, das Plakat sagte, das Ergebnis sei immer vorbei! Bearbeitet. – fierynot