hulp bij programmeren

Status
Niet open voor verdere reacties.

stgoerdin

Nieuwe gebruiker
Lid geworden
14 jun 2009
Berichten
2
hoi,

ik heb op school een kleine opdracht gekregen en zit nu even vast.

ik moest een programma maken waarbij een getal (double) ingevoerd moest worden.
als dat getal even getal is moet dat getal gedeeld worden door 2, als het oneven is moet het getal vermenigvuldigd worden met 3 en dan opgeteld worden met 1 en dit in een loop. dit allemaal zolang getal !=1.0
uiteindelijk moet er ook een teller lopen die uiteindelijk het aantal stappen weergeeft en moet het hoogste getal dat tijdens de berekening eruit komt ook weer gegeven worden.

voorbeeld: getal= 12 --> 6 3 10 5 16 8 4 2 1 (einde loop) teller geeft nu aan 9 stappen.

tot nu toe is alles gelukt en zit ik nu vast bij het hoogste getal weergeven.
ik heb zelf het idee dat er een array gemaakt moet worden waarin de getallen komen en dat je zo dus door vergelijken het hoogste getal eruit kan pikken.
ik weet alleen niet hoe ik dit moet doen aangezien elk ingevoerd getal een variërend aantal stappen heeft en dus de array steeds weer een andere grootte zou moeten hebben.
hieronder ook mijn code, ik gebruik overigens Netbeans 6.5

code:

package prog00;

import javax.swing.JOptionPane;

public class Opdracht
{

public static void main(String[] args)
{
double getal = Double.parseDouble(JOptionPane.showInputDialog(null, "Voer een getal in:"));

int teller = 0;

System.out.println("Het door u ingevoerde getal is "+getal);

while (getal !=1.0)
{
if (getal % 2.0 == 0.0)
{
getal /= 2.0;
teller ++;
System.out.println(getal);

}
else
{
getal = (getal*=3.0) + 1.0;
teller ++;
System.out.println(getal);
}

}
System.out.println("Dit is in "+teller+" stap(pen) gebeurd.");
}
}

wie o wie kan mij helpen??
alle hulp is welkom!!

alvast bedankt!
 
Ofwel ga je je array dynamisch vergroten als ja een getal bijkrijgt dwz je copiëert je array naar een tijdelijke array dat 1 plaats groter is en stelt dan de oorspronkelijke array gelijk aan de tijdelijke...
Dit gezegd zijnde: als je al van collections gehoord hebt bekijk dan eens Vector en ArrayList in de API (als je er nog niet van gehoord hebt werk dan voorlopig voort met Arrays want het geeft je een beter beeld van wat er achter de schermen gebeurt)
 
Ofwel ga je je array dynamisch vergroten als ja een getal bijkrijgt dwz je copiëert je array naar een tijdelijke array dat 1 plaats groter is en stelt dan de oorspronkelijke array gelijk aan de tijdelijke...
Dit gezegd zijnde: als je al van collections gehoord hebt bekijk dan eens Vector en ArrayList in de API (als je er nog niet van gehoord hebt werk dan voorlopig voort met Arrays want het geeft je een beter beeld van wat er achter de schermen gebeurt)

Ik heb zojuist de oplossing gevonden..:thumb:
Bleek dat ik niet zo moeilijk hoefde te doen met arrays maar gewoon een if-statement kon gebruiken..
Ik moest eerst double hoogste=0 initialiseren en daarna in de originele loop
if (getal>hoogste) hoogste = getal ;
plaatsen..

nu werkt hij helemaal perfect en ik deed eigenlijk zomaar zo moeilijk..:o

in iedergeval bedankt voor uw reactie!!
 
Deze opdracht leent zich overigens ook uitstekend voor recursie:

Code:
package src;

import javax.swing.JOptionPane;

public class Stappen {

	public static void main(String[] args) {
		double getal = Double.parseDouble(JOptionPane.showInputDialog(null,
				"Voer een getal in:"));

		int teller = 0;

		System.out.println("Het door u ingevoerde getal is " + getal);
		
		teller = aantalStappen(getal);
		
		System.out.println("Dit is in " + teller + " stap(pen) gebeurd.");
	}

	public static int aantalStappen(double getal) {
		if (getal != 1.0) {
			if (getal % 2.0 == 0.0) {
				getal /= 2.0;
				System.out.println(getal);
				return 1 + aantalStappen(getal);
			} else {
				getal = (getal *= 3.0) + 1.0;
				System.out.println(getal);
				return 1 + aantalStappen(getal);
			}
		} else {		
			return 1;
		}
		
	}
}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan