Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner; // For å lese inn tallord
- public class NorskeTall {
- public NorskeTall() {
- System.out.println("Skriv norske tallord fra 0-99 og få dem tibake som heltall!");
- System.out.print("Tallord: ");
- // Opprett scanner og les tallord
- Scanner leser = new Scanner(System.in);
- while(leser.hasNextLine()) {
- // Prøv å skrive ut tallverdien av ordet vha. hjelpemetoden parseTall
- try {
- System.out.println("Tallet er: " + parseTall(leser.nextLine()));
- }
- // Håndter feil norsk syntax
- catch (FeilNorskSyntaxNumberException e) { System.err.println(e + " fra 0-99!"); }
- // Sier i fra om at programmet er klart til å ta inn et nytt ord
- // uansett om den fikk parset eller feilet!
- finally {
- System.out.println("");
- System.out.print("Tallord: ");
- }
- }
- }
- /**
- * @author Sindre Haaland MTDT2014
- * @param line Norsk tallord fra 0-99
- * @return int verdi av tallordet
- */
- public int parseTall(String line) {
- String[] tall = {"", "en","to","tre","fire","fem","seks","syv","åtte","ni"};
- String[] spesielle = {"ti", "elleve", "tolv", "tretten", "fjorten", "femten", "seksten", "sytten", "atten", "nitten"};
- String[] toSifret = {"tjue","tretti","førti","femti","seksti","sytti","åtti","nitti"};
- int ut = 0;
- // Sjekk om det er et gylid sammenhengende _ord_ vha. regex
- if(!line.matches("(å|\\w)(ø|\\w)\\w*"))
- throw new FeilNorskSyntaxNumberException(line + " er ikke ett sammenhengende ord!");
- // Sjekk det spesielle tallet null
- if(line.equals("null")) ut = -1;
- else {
- for(int x = 0; x<10; x++) {
- // Sjekk om det er tallene 1 til og med 9
- if(line.startsWith(tall[x]) && x != 0 && line.length() == tall[x].length()) {
- ut += x;
- break;
- }
- // Sjekk om det er tallene fra 10 til og med 19
- else if(line.startsWith(spesielle[x])) {
- ut += 10+x;
- break;
- }
- // Sjekk om det er tallene fra 20 til og med 99
- else if(x<8) {
- if(line.startsWith(toSifret[x])) {
- for(int i=0; i<10; i++)
- if(toSifret[x].length()+tall[i].length()==line.length() && line.startsWith(tall[i], toSifret[x].length()))
- ut += ((x+2)*10)+i;
- }
- }
- }
- }
- // Sjekk om ut ikke er blitt endret
- if(ut==0) throw new FeilNorskSyntaxNumberException(line + " er ikke et gyldig norsk tallord");
- // Sjekk om det skal returneres 0 for "null"-teksts
- else if(ut == -1) return 0;
- return ut;
- }
- // Start NorskeTall programmet
- public static void main(String args[]) {
- new NorskeTall();
- }
- // Ny exceptionsklasse som arver fra NumberFormatException
- @SuppressWarnings("serial")
- public class FeilNorskSyntaxNumberException extends NumberFormatException {
- public FeilNorskSyntaxNumberException (String s) {
- super(s);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement