3 van 3

Re: [java] lussen

Geplaatst: zo 02 mar 2008, 19:34
door Ruben01
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.

Re: [java] lussen

Geplaatst: zo 02 mar 2008, 20:53
door Cycloon
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

Re: [java] lussen

Geplaatst: zo 02 mar 2008, 21:13
door EvilBro

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?

Re: [java] lussen

Geplaatst: zo 02 mar 2008, 22:17
door Ruben01
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);

}

}

Re: [java] lussen

Geplaatst: zo 02 mar 2008, 22:26
door Cycloon
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

Re: [java] lussen

Geplaatst: zo 02 mar 2008, 22:43
door Ruben01
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.

Re: [java] lussen

Geplaatst: ma 03 mar 2008, 13:18
door EvilBro
"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;

}