programma werkt niet naar behoren

Status
Niet open voor verdere reacties.

cdtjea

Nieuwe gebruiker
Lid geworden
29 dec 2014
Berichten
3
hallo, ik ben net bezig met programmeren voor school. Gister heb ik bijles gekregen van een vriend van me. Samen hebben we een paar huiswerk opdrachten doorlopen. Bij de laatste opdracht kwamen we er alleen niet uit vandaar vraag ik jullie hulp. Ik zal de huiswerk opdracht bijvoegen en het programma zelf. Wij gebruiken het programma NetBeans.

De opdracht is: Ieder vak heeft een naam en een hoeveelheid studiepunten (ECTS). Deze studiepunten ontvang je
wanneer je het tentamen haalt. De volgende tabel geeft een overzicht van de vakken die de meeste
eerstejaars studenten gemeenschappelijk hebben.
Vak ECTS
Programming 3
Business 3
Infrastructure 3
Databases 3
User Interaction 3
Project Fasten Your Seatbelts 12
Project Agile Development 12
Opzet
Maak een nieuw Java project in NetBeans genaamd “ECTSMonitorV2”.
Declareer de volgende drie arrays. Denk na over de grootte, en maak ze alle drie even groot.
 Declareer een array waarin de namen van de vakken worden opgeslagen. Initialiseer het
array met de vaknamen die in de tabel hierboven staan beschreven.
 Declareer een array waarin je voor ieder vak het aantal ECTS opslaat dat je kunt halen als je
het vak/project haalt. Initialiseer het array met de ECTS per vak zoals in de tabel hierboven.
 Declareer een array waarin je de cijfers zult opslaan die je voor ieder vak behaald hebt.
Input
Gebruik de scanner om de gebruiker voor ieder vak zijn/haar behaalde cijfer in te laten voeren. Zorg
ervoor dat de gebruiker alleen cijfers tussen de 1.0 en de 10.0 kan invoeren. Sla de ingevoerde cijfers
op in het daarvoor gedeclareerde array.2/3
Verwerking
Nadat de gebruiker de cijfers heeft ingevoerd kan het programma bepalen hoeveel ECTS je hebt
gehaald voor ieder vak/project, gebaseerd op het aantal ECTS dat je kan verdienen en het cijfer dat
je hebt gehaald (of hoopt te halen…). Je krijgt het aantal ECTS als je cijfer groter dan of gelijk aan 5,5
is. Tel alle behaalde ECTS bij elkaar op.
Output
De output moet een lijst tonen van de vakken/projecten met daarbij het cijfer en aantal behaalde
ECTS. Aan het eind moet het totaal aantal behaalde ECTS en het totaal aantal te halen ECTS worden
afgedrukt. Als het aantal behaalde ECTS kleiner is dan 5/6 van het totaal dan moet de volgende
melding worden afgedrukt: “PAS OP: je ligt op schema voor een BAS!”.
Zorg ervoor dat de output lijkt op de output van het programma van opdracht 3.
Vak/project:programming Cijfer:8.0 ECTS behaald:3
Vak/project:Business Cijfer:4.0 ECTS behaald:0
Vak/project:Infrastructure Cijfer:5.0 ECTS behaald:0
Vak/project:Databases Cijfer:10.0 ECTS behaald:3
Vak/project:User Interaction Cijfer:3.0 ECTS behaald:0
Vak/project:project FYS Cijfer:6.0 ECTS behaald:12
Vak/project:project PAD Cijfer:5.5 ECTS behaald:12
Totaal behaalde ECTS: 30/39
PAS OP: je ligt op schema voor een BAS!
Hoewel dit programma ingewikkelder lijkt dan die van opdracht 3, is het nu veel eenvoudiger om
nieuwe vakken toe te voegen. Voer nu je complete vakkenlijst van jaar 1 in, waardoor dit
programma echt nuttig wordt.
Upload de file ECTSMonitor2.java naar moodle.

Dit is het java bestand:

* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package ects.monitor.pkg2;

import java.util.Scanner;

/**
*
* @author Casper
*/
public class ECTSMonitor2 {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Scanner Scanner = new Scanner(System.in);

int totaalEcts = 0;

String[] vakken = new String[7];

vakken[0] = new String("Programming");
vakken[1] = new String("Business");
vakken[2] = new String("Infrastructuur");
vakken[3] = new String("Databases");
vakken[4] = new String("User Interaction");
vakken[5] = new String("Project FYS");
vakken[6] = new String("Project Agile Development");

int[] ectsPunten = new int[7];

ectsPunten[0] = 3;
ectsPunten[1] = 3;
ectsPunten[2] = 3;
ectsPunten[3] = 3;
ectsPunten[4] = 3;
ectsPunten[5] = 12;
ectsPunten[6] = 12;

double[] cijfers = new double[7];

for (int i = 0; i < vakken.length; i++) {
do {
System.out.println("Wat is het cijfer van " + vakken + "? ");
cijfers = Scanner.nextDouble();
}
while(i > 1.0 && i < 10.0);
}

for (int i = 0; i < ectsPunten.length; i++) {
totaalEcts = totaalEcts + ectsPunten;
if (cijfers >= 5.5) {
System.out.println("Vak/Project: " + vakken + " Cijfer: "
+ cijfers + " ECTS behaald: " + ectsPunten);
} else {
ectsPunten = 0;
System.out.println("Vak/Project: " + vakken + " Cijfer: "
+ cijfers + " ECTS behaald: " + ectsPunten);

}

}
System.out.println("\nTotaal behaalde ECTS: " + totaalEcts + "/39");

if (totaalEcts < (39 / 6 * 5)) {
System.out.println("PAS OP: Je ligt op schema voor een BAS! ");

}

}
}
 
"Zorg ervoor dat de gebruiker alleen cijfers tussen de 1.0 en de 10.0 kan invoeren"

Denk nog eens goed na over wanneer je het ingevoerde cijfer mag goedkeuren (en dus ook wanneer je het moet afkeuren -> dit wordt dan de voorwaarde van de do-while). Let ook goed op waar het ingevoerde cijfer terechtkomt (in welke variabele). Het is deze variabele die je zal moeten gebruiken om de voorwaarde te controleren.

De regel die je als gevolg van bovenstaande vragen zal moeten wijzigen, heb ik hieronder in het vet gemarkeerd:
Code:
for (int i = 0; i < vakken.length; i++) {
    do {
        System.out.println("Wat is het cijfer van " + vakken[i] + "? ");
        cijfers[i] = Scanner.nextDouble();
    }
    [B]while(i > 1.0 && i < 10.0);[/B]
}
 
Laatst bewerkt:
het ingevoerde cijfer komt toch in de array cijfers[] = i. En de voorwaarde is groter dan 1 dus i > 1 && i < 10?
 
Het ingevoerde cijfer komt inderdaad in de array cijfers terecht, op plaats i.
i zelf is dus de plaats waar het cijfer terechtkomt, niet het ingevoerde cijfer zelf. Het ingevoerde cijfer zit nu in cijfers. Het zal dus die variabele zijn waarop we moeten controleren.

Als ik dit al even aanpas, dan ziet je code er voorlopig zo uit:
Code:
for (int i = 0; i < vakken.length; i++) {
    do {
        System.out.println("Wat is het cijfer van " + vakken[i] + "? ");
        cijfers[i] = Scanner.nextDouble();
    }
    while((cijfers[i] > 1.0) && (cijfers[i] < 10.0));
}

Alleen klopt het nu nog niet helemaal. Je do-while betekent letterlijk: Doe alles wat tussen de accolades staat, zolang de voorwaarde waar is.
Bij jou staat nu het opvragen van het huidige cijfer voor dat vak tussen de accolades; dus dat zal herhaald worden zolang de voorwaarde waar is. En je voorwaarde zegt dat het getal tussen 1.0 en 10.0 moet liggen. Dus zolang je gebruiker een getal tussen de 1.0 en 10.0 ingeeft, wordt hij/zij opnieuw gevraagd om een cijfer voor datzelfde vak in te geven.
Dat is net het omgekeerde van wat de bedoeling is.

Ik stel voor dat je zelf nog eens probeert om de juiste voorwaarde op te stellen.
 
Sorry ik ben er al de hele kerstvakantie mee bezig, maar kom er maar niet uit... moet het morgen inleveren.. ga hierna maar nog een cursus doen op internet. kan jij deze voor mij afmaken?
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan