• De afgelopen dagen zijn er meerdere fora waarop bestaande accounts worden overgenomen door spammers. De gebruikersnamen en wachtwoorden zijn via een hack of een lek via andere sites buitgemaakt. Via have i been pwned? kan je controleren of jouw gegeven ook zijn buitgemaakt. Wijzig bij twijfel jouw wachtwoord of schakel de twee-staps-verificatie in.

[Java] romeins/arabische calculator

Status
Niet open voor verdere reacties.

reaper_unique

Junior lid
Lid geworden
8 nov 2008
Berichten
57
Waarderingsscore
0
hallo,

ik wil een Romeins/Arabische calculator maken.
Dus als ik bv MCIX in geef, moet ik 1109 op het scherm krijgen en omgekeert.

Nu is men vraag, hoe begin ik hier het best aan of beter nog heeft iemand een voorbeeldje voor mij(in Java)?

ik heb er al over nagedacht maar ik weet niet goed hoe ik bv het "probleem" kan oplossen van de plaats waar de letters staan. Want bv. IX of XI, geven elk een verschillende uitkomst.

grtz
 
Een mogelijkheid is bijv: (van arabisch naar romeins)

if(getal - 1000) >= 0; // hoger dan 1000 dus voeg een M toe aan je String van romeinse cijfers en trek 1000 van je getal af.

vervolgens doe je de andere mogelijkheden. bijv getal - 900 >=0 // jestring += "CM"
Zo ga je door totdat je 0 bereikt hebt.

de andere kant op kan je bijv doen door een Stringarray te maken van de mogelijke romeinse cijfers(erg lelijke manier, maar ook de combinatie mogelijkheden kan je hier instoppen) of je kan kijken of de string bijv: XIX of het romeinse cijfer dat voor het romeinse cijfer staat lager is dat die erna komt.
Stringarray {X , V, I} komt I na een V of na een X dan = het getal +=1 anders getal -= 1
 
klopt dit al?
Dit is om info te tonen en/of te stoppen
ik wil eigenlijk vooral weten hoe je nu eigenlijk nieuwe lijnen maakt zonder steeds S.o.p te moeten typen, want ik heb dit nog nooit echt gedaan.
 
Je kan natuurlijk ook gebruiken maken van een JFrame en componenten voor weergave.

Code:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class Main implements MouseListener
{
  JFrame jf;
  JButton b1,b2;
  JTextField f1,f2,f3;
  public Main()
  {
    jf = new JFrame();
    f1 = new JTextField();  // laat hier het romeins invullen
    f2 = new JTextField();  // laat hier het arabisch invullen
    f3 = new JTextField();  // weergeef hier de omzetting
    f1.setColumns(15);
    f2.setColumns(15);
    f3.setColumns(15);
    b1 = new JButton("rom naar ara");
    b2 = new JButton("ara naar rom");
    b1.addMouseListener(this);
    b2.addMouseListener(this);
    jf.setLayout(new FlowLayout());
    jf.add(f1);
    jf.add(b1);
    jf.add(f2);
    jf.add(b2);
    jf.add(f3);
    jf.setBounds(100,100,300,300);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setVisible(true);  
  }
    public void mouseClicked(MouseEvent mouseEvent) {
        if(mouseEvent.getSource() == b1)
        { 
          // doe hier je berekening voor romeins naar arab
          // weergeef je berekening in f3 door middel van jf3.setText();
        }
        if(mouseEvent.getSource() == b2)
        {
          // doe hier je berekening voor arab naar romeins
          // weergeef je berekening in f3 door middel van jf3.setText();
        }
    }
    public void mousePressed(MouseEvent mouseEvent) {
        //To change body of implemented methods use File | Settings | File Templates.
    }
    public void mouseReleased(MouseEvent mouseEvent) {
        //To change body of implemented methods use File | Settings | File Templates.
    }
    public void mouseEntered(MouseEvent mouseEvent) {
        //To change body of implemented methods use File | Settings | File Templates.
    }
    public void mouseExited(MouseEvent mouseEvent) {
        //To change body of implemented methods use File | Settings | File Templates.
    }
    public static void main(String[]args)
    {
      new Main();  
    }
}
 
ik had mss moeten zeggen dat ik nog niet zo lang met java bezig ben :rolleyes:
dus zou ik nit verder willen gaan dan if,while e.d. ik doe het liefst stap per stap
 
Okee hoewel dat stuk van mij niet al te ingewikkeld is. Anyway, ik snap je voorgaande vraag niet helemaal.
klopt dit al?
Dit is om info te tonen en/of te stoppen
ik wil eigenlijk vooral weten hoe je nu eigenlijk nieuwe lijnen maakt zonder steeds S.o.p te moeten typen, want ik heb dit nog nooit echt gedaan.
 
Reaper_unique, de bedoeling van een project is dat je dat grotendeels zelf uitzoekt. Er is voldoende informatie te vinden op het internet. Om hier je project te laten maken door een ander ga je uiteindelijk zelf niet kunnen programmeren.

Zoek er zelf naar, je hebt nog tijd tot volgende week vrijdag. Bovendien denk ik niet dat docenten hiermee opgezet zijn, dit is een publiek forum ook zij kunnen dit lezen ...
 
Laatst bewerkt door een moderator:
@ Tony Macaroni waar maak jij uit op dat het om een school/project gaat ?
Hier kan die jongen toch ook wat van opsteken met wat hulp van derden.

Pred...
 
@ Tony Macaroni waar maak jij uit op dat het om een school/project gaat ?
Hier kan die jongen toch ook wat van opsteken met wat hulp van derde.

Pred...

Aangezien ik dezelfde opgave heb, ik kan je namelijk vertellen dat deze kerel eerste jaars Elektronica-ICT volgt in Gent aan het KaHo Sint Lieven. Nog info nodig?
Ik heb er niet echt een probleem mee dat iemand anders z'n project maakt, hij zal er later zelf alleen maar de dupe van zijn ...
 
@ Tony Macaroni je hebt wel gelijk daarin maar hij is straks zelf de pineut en dat is dan wel weer dom. Ik had het kunnen weten dat je hem kon doordat je hem bij zijn volle naam aansprak. Maar goed het is dan nog zijn beslissing om dom te blijven ;)
 
@ Tony Macaroni je hebt wel gelijk daarin maar hij is straks zelf de pineut en dat is dan wel weer dom. Ik had het kunnen weten dat je hem kon doordat je hem bij zijn volle naam aansprak. Maar goed het is dan nog zijn beslissing om dom te blijven ;)

True :)
 
wanneer heb ik ooit gezegd dat hij dat voor mij moest maken? ik mag toch wel hulp vragen als iets me niet duidelijk is? of is dat ook al verboden?

als je men topic leest zal je merken dat ik nooit gevraagd heb om code te plaatsen of iets dergelijks.
 
@reaper_unique doe lekker je eigen ding en dat hij je zo aanspreekt bij je volle naam vind ik ook niet juist om dat op een forum te doen. Hij had je ook een p.b. kunnen sturen.
MVG..
Pred...
p.s. Ik dacht eerst ff dat het een leraar van je was.
 
Laatst bewerkt door een moderator:
lol nou ja, ik kan er niks aan doen dat ik niet zo goed ben met java.
En nu je het weet dat het voor school is zal ik er ook maar meteen bij zeggen dat het tegen volgende week af moet zijn :hmmz:
En zoals gezegd ben ik niet zo goed met java dus kan ik alle hulp gebruiken en mijn probleem is vooral dat ik het gewoon niet uit men vingers kan krijgen, ik begrijp java zonder probleem maar het uitvoeren.... :blush:

nou ja, genoeg daarover als ik nog een probleem heb zal ik het wel laten weten ;)
 
@reaper_unique gewoon je rust nemen en goed kijken wat of je doet en mss kan Purplesparks je nog wat adviezen geven. Je hebt nog een kleine week dus je kan nog genoeg doen in die tijd s6 vast en het gaat je vast wel lukken kerel .
Groetjes..
Pred...
 
Laatst bewerkt door een moderator:
merci,nu zal ik hier nog heel wat domme dingen posten waaronder dit,

ik wil van arabisch naar romeins omzetten en zou dit dus doen via de "code" hieronder(ga alle verschillene omzettingen eerst in een aparte class zetten om het "simpel" te houden), maar zoals je zelf wel al kan zien is deze nog niet volledig maar alvorens ik verder ga met 100 tallen en lager wou ik het eerst een proberen met bv. 4000. Nu hij geeft de M weer maar hij geeft het meer dan 4x weer.
ik weet dat hier nog heel wat aan moet veranderen maar het zou leuk zijn moest iemand mij in de juiste richting kunnen wijzen.
 
Ik denk dat je het beter zoiets kan doen.
String mijnString;
public void arabischRomeins()
{
while(getal > 999)
{
getal -= 1000
mijnString +="M";
}
while(getal > 900)
{
getal -= 900;
mijnString += "CM";
}
// etc hiermee door gaan totdat je 0 bereikt hebt.
en dan pas wanneer getal = 0 -> System.out.println(mijnString);
}


zover ik jou code begrijp, doe je dit.
bijv getal 4321 naar romeins.
getal1 = 4
print('M');
getal1--; // wordt 3

vervolgens zeg je getal1 wordt getal.charat(1); // in dit geval 4->3<-21 Klopt dus niet helemaal en ik snap al helemaal niet wat je while(getal1>0;)doet en ook nog eens onderaan staat. kon wel eens een eeuwig loopje worden.
 
@ Purplesparks top dat je hem ff verder wil helpen met zijn project en op deze manier leert hij toch bij .
Pred...
 
Ik denk dat je het beter zoiets kan doen.
String mijnString;
public void arabischRomeins()
{
while(getal > 999)
{
getal -= 1000
mijnString +="M";
}
while(getal > 900)
{
getal -= 900;
mijnString += "CM";
}
// etc hiermee door gaan totdat je 0 bereikt hebt.
en dan pas wanneer getal = 0 -> System.out.println(mijnString);
}


zover ik jou code begrijp, doe je dit.
bijv getal 4321 naar romeins.
getal1 = 4
print('M');
getal1--; // wordt 3

vervolgens zeg je getal1 wordt getal.charat(1); // in dit geval 4->3<-21 Klopt dus niet helemaal en ik snap al helemaal niet wat je while(getal1>0;)doet en ook nog eens onderaan staat. kon wel eens een eeuwig loopje worden.

ik denk dat ik begijp wat je doet maar is dit niet wat omslachtig :mellow: ?
zou ik niet beter de code
Code:
     getal -= 1000
    mijnString +="M";
wat veranderen naar iets in de aard van
Code:
getal -= 1000*(getal/1000);
met getal gedeclareerd als int
voor bv 4321 zou dat zijn,
4321 - 4000 = 321 en daarmee doei k dan hetzelfde maar dan voor C.
en ik moet het beperken tot 20 lijnen per methode

Maar ik al eens zien wat het doet als ik jouw uitleg gebruik -_^

edit: het werkt zoals jij het zegt ^^ maar ik krijg nu nog null in het begin :?
dus ik geef bv 4321 in dan krijg ik
Code:
nullMMMMCCC

editII: opgelost ^^

edit III: ok ik heb het nu gedaan tot 1 maar ik als ik dan bv 4321 in geef krijg ik MMMMCCCXXIV
men code is:
Code:
public class RomeinseCalculator1 {
	String mijnString = "";
	int getal;

	public static void main(String[] args) {
		RomeinseCalculator1 bereken = new RomeinseCalculator1();
		bereken.arabischRomeins();
	}
			
	public void arabischRomeins() {
		System.out.print("IN> ");
		getal = Input.readInt();
		
		while(getal > 999) {
		getal -= 999;
		mijnString +="M";
		}

		while(getal > 900) {
		getal -= 900;
		mijnString += "CM";
		}

		while(getal > 800) {
		getal -= 800;
		mijnString += "DCCC";
		}

		while(getal > 700) {
		getal -= 700;
		mijnString += "DCC";
		}

		while(getal > 600) {
		getal -= 600;
		mijnString += "DC";
		}

		while(getal > 500) {
		getal -= 500;
		mijnString += "D";
		}

		while(getal > 400) {
		getal -= 400;
		mijnString += "CD";
		}

		while(getal > 300) {
		getal -= 300;
		mijnString += "CCC";
		}

		while(getal > 200) {
		getal -= 200;
		mijnString += "CC";
		}

		while(getal > 100) {
		getal -= 100;
		mijnString += "C";
	 	}

		while(getal > 90) {
		getal -= 90;
		mijnString += "XC";
	 	}

		while(getal > 80) {
		getal -= 80;
		mijnString += "LXXX";
	 	}

		while(getal > 70) {
		getal -= 70;
		mijnString += "LXX";
	 	}

		while(getal > 60) {
		getal -= 60;
		mijnString += "LX";
	 	}

		while(getal > 50) {
		getal -= 50;
		mijnString += "L";
	 	}

		while(getal > 40) {
		getal -= 40;
		mijnString += "XL";
	 	}

		while(getal > 30) {
		getal -= 30;
		mijnString += "XXX";
	 	}

		while(getal > 20) {
		getal -= 20;
		mijnString += "XX";
	 	}


		while(getal > 10) {
		getal -= 10;
		mijnString += "X";
	 	}

		while(getal > 9) {
		getal -= 9;
		mijnString += "IX";
	 	}

		while(getal > 8) {
		getal -= 8;
		mijnString += "VIII";
	 	}

		while(getal > 7) {
		getal -= 7;
		mijnString += "VII";
	 	}

		while(getal > 6) {
		getal -= 6;
		mijnString += "VI";
	 	}

		while(getal > 5) {
		getal -= 5;
		mijnString += "V";
	 	}

		while(getal > 4) {
		getal -= 4;
		mijnString += "IV";
	 	}

		while(getal > 3) {
		getal -= 3;
		mijnString += "III";
	 	}

		while(getal > 2) {
		getal -= 2;
		mijnString += "II";
	 	}

		while(getal > 1) {
		getal -= 1;
		mijnString += "I";
	 	}


		System.out.println(mijnString);
	}
}
 
De manier die jij zei is ook mogelijk.

Anyway je maakt het nu wel enorm lang
en zal ik even handmatig voor je debuggen:

start_programma
getal 4321
while 999 true ja dus mijnSTring=("m")
4321- 999 = 3322
nog steeds true mijnSTring=("mm")
3322 - 999 2323
nog steeds true mijnSTring=("mmm")
2323-999 = 1324
nog steeds true mijnSTring=("mmmm")
1324-999 = 325
false nu, while loopjes afgaan totdat je
while groter dan 300 tegenkomt
mijnSTring=("mmmmccc")
325-25 =25
false nu
while groter dan 20 = true
mijnSTring=("mmmmcccxx")
25-20 = 5
while groter dan 4 = true nu (niet groter dan 5 //gelijk aan of groter dan.
mijnSTring=("mmmmcccxxxIV")
5-4=1

uiteindelijk zijn de rest van je loopjes false maar blijft je getal wel op 1 staan. IK neem aan dat je het probleem hier ziet. Ik Reageer later wel weer over je aanpak van (teveel) while loopjes. ;)
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan