Muutetaan sana luvuksi. Ensin lasketaan kymmenet ja sitten ykköset tai sitten luku 11-19 välillä. Ohjelma toimii luvuilla 1-99.
import java.util.Scanner; public class Sana_luvuksi { public static void main(String[] args){ Scanner syote = new Scanner(System.in); String sana = ""; int luku = 0; int[] kymmenet = {90,80,70,60,50,40,30,20,10}; int[] toista = {19,18,17,16,15,14,13,12,11}; int[] ykkoset = {9,8,7,6,5,4,3,2,1}; int indeksi = 0; String kymmenetSana[] = {"yhdeksankymmenta","kahdeksankymmenta","seitsemankymmenta","kuusikymmenta","viisikymmenta","neljakymmenta","kolmekymmenta","kaksikymmenta","kymmenen"}; String toistaSana[] = {"yhdeksantoista","kahdeksantoista","seitsemantoista","kuusitoista","viisitoista","neljatoista","kolmetoista","kaksitoista","yksitoista"}; String ykkosetSana[] = {"yhdeksan","kahdeksan","seitseman","kuusi","viisi","nelja","kolme","kaksi","yksi"}; //Muutetaan sana luvuksi. System.out.println("Syötä luku sanamuodossa."); sana = syote.next(); //Lasketaan ensin kymmenet, koska kymmenet tulevat ennen ykköstä. //Yksitoista, kaksitoista lasketaan erikseen, koska se toimii eri logiikalla. for (int x = 0; x < kymmenet.length; x++){ if (sana.contains(kymmenetSana[x])){ //Löydettin kymmenen lisätään se lukuun. luku += kymmenet[x]; indeksi = kymmenetSana[x].length(); //Siirrytään indeksissä ykköseen. //Kun siirrytään indeksissä eteenpäin vältetään luvun laskemista kahteen kertaan. } } //Lasketaan yksitoista, kaksitoista ja jne. for (int x = 0; x < toista.length; x++){ if (sana.contains(toistaSana[x])){ //Löydettin toista lisätään se lukuun. luku += toista[x]; indeksi = toistaSana[x].length(); //Kun siirrytään indeksissä eteenpäin vältetään luvun laskemista kahteen kertaan. } } //Lasketaan ykköset. for (int x = 0; x < ykkoset.length; x++){ if (sana.indexOf(ykkosetSana[x],indeksi) != -1){ //Löydettin ykkönen lisätään se lukuun. luku += ykkoset[x]; } } //Näytetään tulos. System.out.println(luku); } }
Aihe on jo aika vanha, joten et voi enää vastata siihen.