Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Java: Roomalaiset arabialaiseksi

JRokka [10.11.2019 13:07:59]

#

Tässä ohjelmassa muutetaan roomalainen numero arabialaiseksi. Tästä ohjelmasta löytyy kaikki roomalaiset numerot.

Koodi

import java.util.Scanner;

public class Roomalaiset_arabialaiseksi {
    public static void main(String[] args){
        Scanner syote = new Scanner(System.in);
        String r_numero = "";
        int luku = 0;
        boolean onko = false;
        System.out.println("Anna roomalainen numero.");
        r_numero = syote.next();
        //Muutetaan roomalainen numero arabialaiseksi numeroksi.
        //Ensin katsotaan, onko väheneviä osia esim. IV = 5-1=4
        for (int x = 0; x < r_numero.length(); x++){
            //Katsotaan, onko väheneviä osia.
            //Katsotaan x+1:lla voiko väheneviä osia olla.
            //Jos väheneviä osia ei ole, varmistetaan ettei lukua lasketa kahteen kertaan.
            onko = false; //Oletetaan aluksi ettei ole väheneviä osia.
            if (x + 1 < r_numero.length()){
              if (r_numero.charAt(x) == 'C' && r_numero.charAt(x+1) == 'M'){
                  onko = true;
                  luku += 900;
                  x += 1;
              }
              else if (r_numero.charAt(x) == 'C' && r_numero.charAt(x+1) == 'D'){
                  onko = true;
                  luku += 400;
                  x += 1;
              }
              else if (r_numero.charAt(x) == 'X' && r_numero.charAt(x+1) == 'C'){
                  onko = true;
                  luku += 90;
                  x += 1;
              }
              else if (r_numero.charAt(x) == 'X' && r_numero.charAt(x+1) == 'L'){
                  onko = true;
                  luku += 40;
                  x += 1;
              }
              else if (r_numero.charAt(x) == 'I' && r_numero.charAt(x+1) == 'X'){
                  onko = true;
                  luku += 9;
                  x += 1;

              }
              else if (r_numero.charAt(x) == 'I' && r_numero.charAt(x+1) == 'V'){
                  onko = true;
                  luku += 4;
                  x += 1;
              }
            }
            if (onko == false){
                //Luvussa ei ole väheneviä osia.
                if (r_numero.charAt(x) == 'M'){
                    luku += 1000;
                }
                else if (r_numero.charAt(x) == 'D'){
                    luku += 500;
                }
                else if (r_numero.charAt(x) == 'C'){
                    luku += 100;
                }
                else if (r_numero.charAt(x) == 'L'){
                    luku += 50;
                }
                else if (r_numero.charAt(x) == 'X'){
                    luku += 10;
                }
                else if (r_numero.charAt(x) == 'V'){
                    luku += 5;
                }
                else if (r_numero.charAt(x) == 'I'){
                    luku += 1;
                }
            }

        }
        //Näytetään tulos.
        System.out.println(luku);
    }
}

Matti Holopainen [10.11.2019 15:36:42]

#

Tämän voisi kirjoittaa lyhyemmin ja selkeämmin vaikkapa näin:

int luku = 0
String r_numero = syote.next() + " "

for (int x = 0; x < r_numero.length() - 1; x++) {

    switch (numero.substring(x, x + 2) {
        case "CM": luku -= 100; break;
        case "CD": luku -= 100; break;
        case "XC": luku -= 10;  break;
        case "XL": luku -= 10;  break;
        case "IX": luku -= 1;   break;
        case "IV": luku -= 1;   break;
        default:

            switch (numero.charAt(x) {
                case 'M': luku += 1000; break;
                case 'D': luku += 500;  break;
                case 'C': luku += 100;  break;
                case 'L': luku += 50;   break;
                case 'X': luku += 10;   break;
                case 'V': luku += 5;    break;
                case 'I': luku += 1;    break;
                default:  System.out.println("Virheellinen merkki")
            }
      }
}

System.out.println(luku)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta