Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

Help nodig met Java code

tafelpoot
13 antwoorden
  • Hallo allemaal,

    Ik ben bezig met een programma in java waarmee je een vlieg ticket kan boeken, nu is the probleem dat als ik de boarding pas print, is de eerste goed, maar de tweede in de zelfde rij is 7 in plaats van 4. ( er zijn 3 stoelen in een rij). hij teld er dus 6 bij in plaats van 3.

    [code:1:ecb6c510f3]case 'w':
    for (i = 0; i <= 2; i++)
    {
    if (seatW [i] == 0)
    {
    System.out.println("*****************************************");
    System.out.println("Thank you for flying with FlyWithDimitris");
    System.out.println("Boarding pass. Seat:" + ((i * 3) + 1) );
    System.out.println("*****************************************");
    seatW [i] = seatW [i] + 1;
    break;
    }
    else if ( i <= 2)
    {
    i = i + 1;
    }
    else
    {
    System.out.println("Sorry this type of seat in Executive class if booked full");
    }
    }
    break;[/code:1:ecb6c510f3]

    Kan iemand zijn waar ik fout ben gegaan, zit al een week te puzzlen maar kan het niet vinden.
  • een oplossing voor je probleem zie ik niet direct, ik heb daar iets meer code voor nodig van wat erom heen staat.

    Wel even een paar opmerkingen:
    [code:1:eede781b4a]case'w'
    code…
    break[/code:1:eede781b4a]
    dat slaat echt helemaal nergens op zo
    mssn dat je een regel vergeten bent te kopieren


    en je laatste else-statement zal nooit worden bereikt:
    immers, wanneer "seatW == 0" NIET geldt, dan geldt ALTIJD "i <= 2", aangezien i de waarden 0,1 en 2 aanneemt.


    kijk hier nog even goed naar, geef mij daarna wat meer code, en ik zal je verder proberen te helpen
  • Dat was inderdaad een foutje van mij, van die else, maar dat lost mijn probleem niet op.
    Hier is een stukje van de code, je hebt net voor Executive class gekozen en wil nu een stoel boeken (Executive class: is classSelection == 1)
    [code:1:432414ada7]
    if (classSelection == 1)
    {
    System.out.println("Welcome to Executive Class");
    System.out.println("Please select a Seat Preference");
    System.out.println("w for Window");
    System.out.println("m for Middle");
    System.out.println("a for Aisle");
    System.out.println();

    // User enters choice
    seatSelection = EasyIn.getChar();

    // Check Seat if available or booked seat
    switch (seatSelection)
    {

    // User choice is Window seat
    case 'w':
    for (i = 0; i <= 2; i++)
    {
    if (seatW [i] == 0)
    {
    System.out.println("*****************************************");
    System.out.println("Thank you for flying with FlyWithDimitris");
    System.out.println("Boarding pass. Seat:" + ((i * 3) + 1) );
    System.out.println("*****************************************");
    seatW [i] = seatW [i] + 1;
    break;
    }
    else
    {
    i = i + 1;
    }
    }
    break;

    // User choice is Middle seat
    case 'm':

    for (j = 0; j <= 2; j++)
    {
    if (seatM [j] == 0)
    {
    System.out.println("*****************************************");
    System.out.println("Thank you for flying with FlyWithDimitris");
    System.out.println("Boarding pass. Seat:" + ((j * 3) + 2) );
    System.out.println("*****************************************");
    seatM [j] = seatM [j] + 1;
    break;
    }
    else
    {
    j = j + 1;
    }
    }
    break;

    // User choice is Aisle seat
    case 'a':
    for (k = 0; k <= 2; k++)
    {
    if (seatA [k] == 0)
    {
    System.out.println("*****************************************");
    System.out.println("Thank you for flying with FlyWithDimitris");
    System.out.println("Boarding pass. Seat:" + ((k * 3) + 3) );
    System.out.println("*****************************************");
    seatA [k] = seatA [k] + 1;
    break;
    }
    else
    {
    k = k + 1;
    }
    }
    break;

    default:
    System.out.println("Invalid choice");
    }
    }
    [/code:1:432414ada7]
    Dit is de code for een hele class, zo zijn er nog twee classen (Business == 2 en Economic == 3)
  • ik denk dat ik je probleem weet,
    (als mijn veronderstelling klopt heh)
    als je de eerste maal voor window kiest is er nog geen enkel window bezet dus hij komt niet in de else-tak en hij doet ook nog niet de ++i van aan die for-loop
    de 2e maal komt hij in de else tak en doet hij die i = i + 1 en dan loopt hij nog eens door de for loop waar hij bij elke keer die for loop herbegint die ++i uitvoer.. dus je i wordt in het totaal met 2 verhoogt ipv met 1.
    je moet dus die i = i + 1 vervangen door iets anders in je else tak of je i++ vervangen door iets anders als next van je for loop (ik raad aan de else gewoon leeg te laten of er een of andere dummy in te stoppen).

    Groetjes
    Tafelpoot
  • dat lost het probleem inderdaad op. maar dat brengt me op een een nieuw probleem, als i = 2, dan stopt hij de for loop, maar wat het eigenlijk moet doen is naar een alternative booking gaan voor bijvoorbeeld middle of aisle seat. Enig idee hoe ik dit het beste kan doen
  • ik weet niet of dit in java ook kan maar in C++ kan je exceptions throwen dus als je dan ergens een fout hebt gooi je een exception die je dan een eindje terug in het programma opvangt en dan kan je dus terug herbeginnen van waar je de "catch" hebt gezet.

    Als je dit niet kan kan je ook op het einde een if-testje zetten waar je kijkt of de i=2, zoja, kies volgende optie.
    het nadeel hiermee is dat als al je stoelen vol zitten je natuurlijk in een endless loop zit heh.
  • ik heb al een oplossing gevonden:

    [code:1:ddc9fd23cc]
    else if (i <= 1)
    {
    i = i;
    }
    else
    {
    alternative stoel
    }
    [/code:1:ddc9fd23cc]

    zo lang i <= 1 gooit hij hem terug, als i = 2 en de stoel is vol gaat hij naar de else
  • sorry, ik was even weg, maar je hebt al een goede oplossing gevonden

    alleen je ele if (i <= 1) { i=i; }
    das niet netjes: je kan de body nu net zo goed leeg laten, of een continue neerzetten, dan wordt de for-loop opnieuw aangeroepen na de increament


    je kan beide else's samenvoegen tot:

    else if (i == 2)
    {
    alternatieve stoel- body
    }

    } //end-for

    bij i=0 en i=1, gaat-ie gewoon verder met de loop
  • [quote:9c269aa25c="marientje"]sorry, ik was even weg, maar je hebt al een goede oplossing gevonden

    alleen je ele if (i <= 1) { i=i; }
    das niet netjes: je kan de body nu net zo goed leeg laten, of een continue neerzetten, dan wordt de for-loop opnieuw aangeroepen na de increament


    je kan beide else's samenvoegen tot:

    else if (i == 2)
    {
    alternatieve stoel- body
    }

    } //end-for

    bij i=0 en i=1, gaat-ie gewoon verder met de loop[/quote:9c269aa25c]

    das idd een mooie oplossing..

    ff ter info: bestaat er bij Java zoiets als een "throw" en "catch" zoals bij C++?

    groetjes
    Tafelpoot
  • [quote:6c0de35a2c="tafelpoot"]ff ter info: bestaat er bij Java zoiets als een "throw" en "catch" zoals bij C++?[/quote:6c0de35a2c]Dat bestaat inderdaad, maar het is natuurlijk geen nette oplossing om een bekende "fout" een exceptie te laten gooien omdat je er dan maar vanaf bent (zoals je hierboven suggereerd). Excepties gooien is enorm vertragend en moet je dus alleen in noodgevallen gebruiken, veel beter en vooral sneller is om zelf dingen te controleren zoals "null" values etc.
  • [quote:e71901ccbc="Bill Gates"][quote:e71901ccbc="tafelpoot"]ff ter info: bestaat er bij Java zoiets als een "throw" en "catch" zoals bij C++?[/quote:e71901ccbc]Dat bestaat inderdaad, maar het is natuurlijk geen nette oplossing om een bekende "fout" een exceptie te laten gooien omdat je er dan maar vanaf bent (zoals je hierboven suggereerd). Excepties gooien is enorm vertragend en moet je dus alleen in noodgevallen gebruiken, veel beter en vooral sneller is om zelf dingen te controleren zoals "null" values etc.[/quote:e71901ccbc]

    helemaal mee eens 8)
  • [quote:583cc4368f="marientje"][quote:583cc4368f="Bill Gates"][quote:583cc4368f="tafelpoot"]ff ter info: bestaat er bij Java zoiets als een "throw" en "catch" zoals bij C++?[/quote:583cc4368f]Dat bestaat inderdaad, maar het is natuurlijk geen nette oplossing om een bekende "fout" een exceptie te laten gooien omdat je er dan maar vanaf bent (zoals je hierboven suggereerd). Excepties gooien is enorm vertragend en moet je dus alleen in noodgevallen gebruiken, veel beter en vooral sneller is om zelf dingen te controleren zoals "null" values etc.[/quote:583cc4368f]

    helemaal mee eens 8)[/quote:583cc4368f]

    geeft dit bij C++ dan ook zo'n vertragingen?

    ik vind het eigelijk een heel handig systeem! bijvoorbeeld username controle. als de user niet bestaat, gooi een exception en je kan ze makkelijk opvangen waar het fout gelopen is om een nieuwe input van de user te vragen.

    (dit is totaal offtopic, ik weet het maar het probleem van de TS is toch al opgelost heh)
  • [quote:218db292a4="tafelpoot"]geeft dit bij C++ dan ook zo'n vertragingen?

    ik vind het eigelijk een heel handig systeem! bijvoorbeeld username controle. als de user niet bestaat, gooi een exception en je kan ze makkelijk opvangen waar het fout gelopen is om een nieuwe input van de user te vragen.[/quote:218db292a4]Ik durf niet te zeggen of het in C++ ook vertraging geeft, maar in .NET (C#) is het in ieder geval merkbaar trager.

    Om even naar jouw voorbeeld te gaan, het is veel beter om bijvoorbeeld een boolean of null te retourneren en dat af te handelen dan een exceptie throwen en catchen. Het is (waarschijnlijk) sneller en programmeertechnisch een stuk netter.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.