Advertisement
Guest User

Untitled

a guest
May 26th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.77 KB | None | 0 0
  1. import java.util.Scanner; // For å lese inn tallord
  2.  
  3. public class NorskeTall {
  4.    
  5.     public NorskeTall() {
  6.         System.out.println("Skriv norske tallord fra 0-99 og få dem tibake som heltall!");
  7.         System.out.print("Tallord: ");
  8.         // Opprett scanner og les tallord
  9.         Scanner leser = new Scanner(System.in);
  10.         while(leser.hasNextLine()) {
  11.             // Prøv å skrive ut tallverdien av ordet vha. hjelpemetoden parseTall
  12.             try {
  13.                 System.out.println("Tallet er: " + parseTall(leser.nextLine()));
  14.             }
  15.             // Håndter feil norsk syntax
  16.             catch (FeilNorskSyntaxNumberException e) { System.err.println(e + " fra 0-99!"); }
  17.             // Sier i fra om at programmet er klart til å ta inn et nytt ord
  18.             // uansett om den fikk parset eller feilet!
  19.             finally {  
  20.                 System.out.println("");
  21.                 System.out.print("Tallord: ");
  22.             }
  23.         }
  24.     }
  25.     /**
  26.      * @author Sindre Haaland MTDT2014
  27.      * @param line Norsk tallord fra 0-99
  28.      * @return int verdi av tallordet
  29.      */
  30.     public int parseTall(String line) {
  31.         String[] tall = {"", "en","to","tre","fire","fem","seks","syv","åtte","ni"};
  32.         String[] spesielle = {"ti", "elleve", "tolv", "tretten", "fjorten", "femten", "seksten", "sytten", "atten", "nitten"};
  33.         String[] toSifret = {"tjue","tretti","førti","femti","seksti","sytti","åtti","nitti"};
  34.         int ut = 0;
  35.         // Sjekk om det er et gylid sammenhengende _ord_ vha. regex
  36.         if(!line.matches("(å|\\w)(ø|\\w)\\w*"))
  37.             throw new FeilNorskSyntaxNumberException(line + " er ikke ett sammenhengende ord!");
  38.         // Sjekk det spesielle tallet null
  39.         if(line.equals("null")) ut = -1;
  40.         else {
  41.             for(int x = 0; x<10; x++) {
  42.                 // Sjekk om det er tallene 1 til og med 9
  43.                 if(line.startsWith(tall[x]) && x != 0 && line.length() == tall[x].length()) {
  44.                     ut += x;
  45.                     break;
  46.                 }
  47.                 // Sjekk om det er tallene fra 10 til og med 19
  48.                 else if(line.startsWith(spesielle[x])) {
  49.                     ut += 10+x;
  50.                     break;
  51.                 }
  52.                 // Sjekk om det er tallene fra 20 til og med 99
  53.                 else if(x<8) {
  54.                     if(line.startsWith(toSifret[x])) {
  55.                         for(int i=0; i<10; i++)
  56.                             if(toSifret[x].length()+tall[i].length()==line.length() && line.startsWith(tall[i], toSifret[x].length()))
  57.                                 ut += ((x+2)*10)+i;
  58.                     }
  59.                 }
  60.             }
  61.         }
  62.         // Sjekk om ut ikke er blitt endret
  63.         if(ut==0) throw new FeilNorskSyntaxNumberException(line + " er ikke et gyldig norsk tallord");
  64.         // Sjekk om det skal returneres 0 for "null"-teksts
  65.         else if(ut == -1) return 0;
  66.         return ut;
  67.     }
  68.  
  69.     // Start NorskeTall programmet
  70.     public static void main(String args[]) {
  71.         new NorskeTall();
  72.     }
  73.    
  74.     // Ny exceptionsklasse som arver fra NumberFormatException
  75.     @SuppressWarnings("serial")
  76.     public class FeilNorskSyntaxNumberException extends NumberFormatException {
  77.         public FeilNorskSyntaxNumberException (String s) {
  78.             super(s);
  79.         }
  80.     }
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement