Gebruikersavatar
Ruben01
Artikelen: 0
Berichten: 2.902
Lid geworden op: wo 02 mei 2007, 18:10

Re: [java] lussen

EvilBro schreef:idee 1: Een String omdraaien is makkelijker dan een int omdraaien.

idee 2: 123 `mod` 10 = 3; 123 `div`10 = 12; 12 `mod` 10 = 2; 12 `div` 10 = 1; 1 `mod` 10 = 1... kijk eens naar de resultaten van de modulo's...
Strings heb ik nog niet gezien

Zou je idee 2 misschien even kunnen verduidelijken ?

Ik heb ondertussen mijn idee al een beetje in java omgezet zodat het misschien duidelijker is:

Code: Selecteer alles

public static void main(String[]args)

{

Input l=new Input();

char ch;

int nummer=0;

ch=l.readChar();

while(ch!='\n')

{

int n=0;

double macht=Math.pow(10,(double)n);

nummer=((int) ch - (int)'0')*(int)macht;   //waarschijnlijk zit in deze regel de fout 

n++;

ch=l.readChar();

}

System.out.println("het cijfer is "+nummer);

}

}
Momenteel geeft hij enkel nog maar het laatste karakter weer dat ik ingeef, het voorgaande moet er dus nog bij opgeteld worden maar dat lukt niet direct.
Gebruikersavatar
Cycloon
Artikelen: 0
Berichten: 4.810
Lid geworden op: ma 24 jan 2005, 20:56

Re: [java] lussen

Je zou alleszins eerst en vooral het aantal ingelezen chars moeten bijhouden om de rang te bepalen. Daarna kun je iets zoals dit doen:

Code: Selecteer alles

// Java Document

int rang=1;

for (int i=0;i<aantChars;i++) { // grootste rang berekenen

rang*=10;

}

int[] getallen = new int[aantChars];

for (int i=0;i<aantChars;i++) { // we gaan het getal 'splitsen'

getallen[i]=nummer%rang;

rang/=10;

}

nummer=0;

for (int i=0;i<aantChars;i++) { // we stellen het omgekeerde getal samen

nummer=nummer*10+getallen[aantChars-1-i];

}

System.out.println("Het omgekeerde getal: "+nummer);
Ik heb deze code niet getest, dus er kan best nog een fout inzitten :D
EvilBro
Artikelen: 0
Berichten: 7.081
Lid geworden op: vr 30 dec 2005, 09:45

Re: [java] lussen

Code: Selecteer alles

nummer=((int) ch - (int)'0')*(int)macht;   //waarschijnlijk zit in deze regel de fout
vergelijk dit eens met:

Code: Selecteer alles

nummer = 6
Verwacht je dat nummer ooit een optelling gaat worden?
Gebruikersavatar
Ruben01
Artikelen: 0
Berichten: 2.902
Lid geworden op: wo 02 mei 2007, 18:10

Re: [java] lussen

Je bovenstaande vraag begrijp ik niet zo goed EvilBro.

Het stukje code van Cycloon kan ik wel ongeveer begrijpen maar ik heb in men eigen code de fout kunnen vinden.

Doordat ik in mijn lus de n had gedeclareerd werd deze telken terug 0 ipv op te tellen. Ik heb deze nu buiten de lus gezet en het programma werkt naar behoren.

Bedankt voor de hulp !

Code: Selecteer alles

public class Oefening

{

public static void main(String[]args)

{

Input l=new Input();

char ch;

double nummer=0,n=0;

System.out.print("Geef een getal in ");

ch=l.readChar();

while(ch!='\n')

{

double macht=Math.pow(10,(double)n);

nummer=nummer +((int) ch - (int)'0')*(int)macht;

n++;

ch=l.readChar();

}

System.out.println("Omgekeerde getal van de ingegeven karakters is "+nummer);

}

}
Gebruikersavatar
Cycloon
Artikelen: 0
Berichten: 4.810
Lid geworden op: ma 24 jan 2005, 20:56

Re: [java] lussen

Het is wel af te raden om rekenfuncties zoals Math.pow() te gebruiken omdat deze toch wel wat meer rekenwerk vragen dan bv mijn stukje code (pow vraagt namelijk een hele reeksontwikkeling). In kleine programmatjes maakt dat natuurlijk niet uit, maar in grote, zware programma's waar Math.pow() enkele 1000den keren zou voorkomen (bv in grote lussen) kan dat best wel wat rekenwerk schelen :D
Gebruikersavatar
Ruben01
Artikelen: 0
Berichten: 2.902
Lid geworden op: wo 02 mei 2007, 18:10

Re: [java] lussen

Het is wel af te raden om rekenfuncties zoals Math.pow() te gebruiken omdat deze toch wel wat meer rekenwerk vragen dan bv mijn stukje code (pow vraagt namelijk een hele reeksontwikkeling). In kleine programmatjes maakt dat natuurlijk niet uit, maar in grote, zware programma's waar Math.pow() enkele 1000den keren zou voorkomen (bv in grote lussen) kan dat best wel wat rekenwerk schelen :D
Daar heb je gelijk in Cycloon maar het bovenstaande programma is gewoon om wat te oefenen e.d. er kom dus maar één Math.pow() in dus ...

Ik ben al zeer tevreden dat het werkt het is misschien wel niet 100% maar nu ik een werkend programma heb kan ik nog altijd wel wat aanpassingen doen.
EvilBro
Artikelen: 0
Berichten: 7.081
Lid geworden op: vr 30 dec 2005, 09:45

Re: [java] lussen

"premature optimization is the root of all evil."

Code: Selecteer alles

public int reverseInt(int aNumber) {

  int result = 0;

  

  while (aNumber > 0) {

 result = (result * 10) + (aNumber % 10)

 aNumber = aNumber/10;

  }

  return result;

}

Terug naar “Informatica en programmeren”