Guest User

Untitled

a guest
Feb 21st, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.17 KB | None | 0 0
  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package suomeksi;
  6.  
  7. import java.util.Arrays;
  8. import java.util.List;
  9.  
  10. /**
  11.  *
  12.  * @author avihavai
  13.  */
  14. public class LuvutSuomeksi {
  15.  
  16.     public static String annaLukuSuomeksi(int luku) {
  17.         if (luku == 0) {
  18.             return "nolla";
  19.         }
  20.  
  21.         return lukuSuomeksi(luku);
  22.     }
  23.  
  24.     public static String lukuSuomeksi(int luku) {
  25.         if (luku > 0 && luku <= 20) {
  26.             return Luvut.annaLuku(luku);
  27.         } else if (luku > 20) {
  28.             return annaLukuOsina(luku, Kokoluokka.annaLuvunKokoluokka(luku));
  29.         }
  30.  
  31.         return "";
  32.     }
  33.  
  34.     private static String annaLukuOsina(int luku, int suuruusluokka) {
  35.         String pienemmatMerkitsevat = "";
  36.         if (luku % suuruusluokka != 0) {
  37.             pienemmatMerkitsevat = lukuSuomeksi(luku % suuruusluokka);
  38.         }
  39.  
  40.         String suurimmatMerkitsevat = "";
  41.         if (luku >= 2 * suuruusluokka) {
  42.             // luvulla useampi suurin merkitsevä
  43.             suurimmatMerkitsevat = lukuSuomeksi(luku / suuruusluokka);
  44.         }
  45.  
  46.         return suurimmatMerkitsevat
  47.                 + Kokoluokka.annaLukusana(luku)
  48.                 + pienemmatMerkitsevat;
  49.     }
  50.  
  51.     public static void main(String[] args) {
  52.         System.out.println(annaLukuSuomeksi(1342));
  53.         System.out.println(annaLukuSuomeksi(1413342));
  54.         System.out.println(annaLukuSuomeksi(1211413342));
  55.     }
  56. }
  57.  
  58. enum Kokoluokka {
  59.     // tänne voi lisäillä näitä.
  60.  
  61.     MILJARDI("miljardi", "miljardia", 1000000000),
  62.     MILJOONA("miljoona", "miljoonaa", 1000000),
  63.     TUHAT("tuhat", "tuhatta", 1000),
  64.     SATA("sata", "sataa", 100),
  65.     KYMMENEN("kymmenen", "kymmentä", 10);
  66.  
  67.     private Kokoluokka(String yksikko, String monikko, int kokoluokka) {
  68.         this.yksikko = yksikko;
  69.         this.monikko = monikko;
  70.         this.kokoluokka = kokoluokka;
  71.     }
  72.     private String yksikko;
  73.     private String monikko;
  74.     private int kokoluokka;
  75.  
  76.     public static int annaLuvunKokoluokka(int luku) {
  77.         for (Kokoluokka luokka : values()) {
  78.             if (luku >= luokka.kokoluokka) {
  79.                 return luokka.kokoluokka;
  80.  
  81.             }
  82.         }
  83.  
  84.         return 1;
  85.     }
  86.  
  87.     public static String annaLukusana(int luku) {
  88.         for (Kokoluokka luokka : values()) {
  89.             if (luku >= luokka.kokoluokka * 2) {
  90.                 return luokka.monikko;
  91.             }
  92.  
  93.             if (luku >= luokka.kokoluokka) {
  94.                 return luokka.yksikko;
  95.             }
  96.         }
  97.  
  98.         return Luvut.annaLuku(luku);
  99.     }
  100. }
  101.  
  102. class Luvut {
  103.  
  104.     static List<String> PIKKULUVUT_SANOIN = Arrays.asList(
  105.             "nolla", "yksi", "kaksi", "kolme", "neljä", "viisi",
  106.             "kuusi", "seitsemän", "kahdeksan", "yhdeksän", "kymmenen");
  107.  
  108.     public static String annaLuku(int arvo) {
  109.         if (arvo == 20) {
  110.             return "kaksikymmentä";
  111.         }
  112.  
  113.         String yliKymmenen = "";
  114.         if (arvo > 10) {
  115.             yliKymmenen = "toista";
  116.             arvo = arvo - 10;
  117.         }
  118.  
  119.         return PIKKULUVUT_SANOIN.get(arvo) + yliKymmenen;
  120.     }
  121. }
Add Comment
Please, Sign In to add comment