Tehtävänä on pieni java-ohjelman rakentaminen. Eli Roomalaisen luvun muuttaminen numeroksi,yksinkertaisesti. Löytyyköhän keneltäkään koodi apua tähän??
Toki, mutta millaista apua kaipaat? Jos ohjelma on harjoitustehtävä, et varmaan halua valmiin ohjelman lähdekoodia. Ensimmäinen vaihe on miettiä, miten roomalaiset numerot muutetaan omaan järjestelmäämme. Hyvä konsti voisi olla summata yhteen roomalaisia merkkejä vastaavat luvut. Esim. jos luku on CCXXXVI, tulos on 100 + 100 + 10 + 10 + 10 + 5 + 1 = 236. Ainoa vaikeus tulee luvuista 4, 9, 40, 90, 400 ja 900, ja kannattaa ehkä saman tien tunnistaa yhdistelmät IV, IX, XL, XC, CD ja CM. Silloin esim. luku CMXXIV muuttuu muotoon 900 + 10 + 10 + 4 = 924.
Oon kyllä tehnyt noita pohjia mutta jotenkin vaan se ei toimi!!Ottaisin kyllä ihan mielelläni valmiin,jostain voisin sitten tarkastaa ns. oikean vastauksen ja hioa omaa koodia.
Tässä on jokin tekele, jonka toimivuutta en takaa.
public class Rooma {
private static String[] merkit = {"M", "CM", "D", "CD", "C",
"XC", "L", "XL", "X", "IX", "V", "IV", "I"};
private static int[] arvot = {1000, 900, 500, 400, 100,
90, 50, 40, 10, 9, 5, 4, 1};
private static int maara = 13;
private static int muuta(String luku) {
int summa = 0, alku = 0;
for (int i = 0; i < maara; i++) {
while (luku.indexOf(merkit[i], alku) == alku) {
summa += arvot[i];
alku += merkit[i].length();
}
}
return summa;
}
public static void main(String[] args) {
System.out.println(muuta("XI"));
System.out.println(muuta("XCVIII"));
System.out.println(muuta("CCXXXVI"));
System.out.println(muuta("CMXXIV"));
System.out.println(muuta("MMVII"));
}
}Hienoa,lähes tollasta oon itsekkin saanut aikaseks!!"pääpulmana" on vaan, et miten sen sais toimimaan niin et kysyy käyttäjältä esim. Anna luku väliltä 1-3999?,jonka jälkeen tulis sitten kyseinen annettu luku roomalaisena.
Luvun lukeminen käy jotensakin näin:
import java.util.Scanner;
public class Esimerkki
{
// Tehdään scanner-olio, jolla luetaan
private static Scanner lukija = new Scanner(System.in);
public static void main(String args[])
{
int luku = 0;
System.out.print("Syötä luku: ");
// Luetaan seuraava kokonaisluku
luku = lukija.nextInt();
}
}Ei tää homma vaan toimi!!On mennyt pää ihan sekasin,kun koodit vaan pyörii=(Huomenna olis viimeinen päivä,toivottavasti joku vois vielä auttaa?
Tee looppi, jossa tutkit onko annettu luku >= arvot suurimmasta pienimpään. Kun ehdon toteuttava arvo löytyy, vähennät arvon luvusta kunnes luku < arvo. Lisäät merkkijonoon arvoa vastaavan merkin niin monena kuin vähennyksiä on tehty. jatkat looppia kunnes viimenenkin arvo (=1) on käyty läpi. Toivottavasti ajatus selviää tuosta.
Tässä vähän pseudokoodia, millä tavalla sen voisi tehdä (ei varmastikaan kätevin):
tonnit = luku / 1000
silmukka * tonnit
{
tulosta "M"
}
sataset = (luku % 1000) / 100
jos (sataset = 9) tulosta "CM"
muuten jos (sataset < 9 ja sataset >= 5)
{
tulosta "D"
silmukka * (sataset-5)
{
tulosta "C"
}
}
muuten jos (sataset = 4) tulosta "CD"
muuten
{
silmukka * sataset
{
tulosta "C"
}
}
kympit = (luku % 100) / 10
// Vastaavat toimenpiteet kun satasille
ykköset = (luku % 10)
// Ja vastaavasti taas
tulosta rivinvaihtoEn ole jaksanut Javaan perehtyä mutta VB5:llä toimii oheinen koodi.
Testilukuna oli 2743 ja tulokseksi tuli MMDCCXLIII. Olen laiska kirjoittamaan ja kommentoimaan mutta eiköhän tuosta saa tolkun.
Option Explicit
Dim m As Variant
Dim a As Variant
Dim i As Integer
Dim n As Integer
Dim R As String
Private Sub Form_Load()
m = Array("M", "CM", "D", "CD", "C", _
"XC", "L", "XL", "X", "IX", "V", "IV", "I")
a = Array(1000, 900, 500, 400, 100, _
90, 50, 40, 10, 9, 5, 4, 1)
txtA_KeyPress (13)
End Sub
Private Sub txtA_KeyPress(KeyAscii As Integer)
If KeyAscii <> 13 Then Exit Sub
On Error GoTo virhe
If txtA > 3999 Then txtA = 3999
n = txtA
i = 0
R = ""
Do
If n >= a(i) Then
n = n - a(i)
R = R & m(i)
Else
i = i + 1
End If
Loop Until i = 13
txtR = R
Exit Sub
virhe:
MsgBox Err.Description
End SubApuvaah,toi menee hieman ohi,hehe!!!mä oon kyllä niin paras ohjelmoinnis,pakko saada toi pakollinen java työ vaan jotenkin hoidettua!!ehkäpä pitää palauttaa nää kaikki,heh!!no toivottavasti mun enkeli vielä löytyis=)
Jospa lukisit nuo vinkit toiseenkin kertaan oikein ajatuksen kanssa niin ehkä asia alkaa kirkastua.
Tämähän on hyvä harjoitustehtävä virheenkäsittelyineen päivineen.
Aihe on jo aika vanha, joten et voi enää vastata siihen.