Vinnaren i pepparkakshustävlingen!
2014-03-09, 21:25
  #2041
Medlem
tj.s avatar
Citat:
Ursprungligen postat av pkj
Vet inte riktigt hur det ska bli. Uppgiften känns väldigt luddig.
Jag tycker inte det är särskilt svårt. Ett kort exempel från hans output
Kod:
1. Initierar däck till att vara 15
2. Skriver ut antalet däck 
(15)
3. Tar ut 20 däck.
4. Skriver ut antalet däck (0
Exempel två
Kod:
1. Initierar fälgar till att vara 10
2. Skriver ut antalet fälgar 
(10)
3. Tar ut 2 fälgar
4. Skriver ut antalet fälgar 
(8
Det han vill är att din kod ska fungera på samma sätt. (Hint: du vill alltså manipulera ditt antal-attribut i TaUt-funktionen.)
Citera
2014-03-09, 21:57
  #2042
Medlem
Citat:
Ursprungligen postat av tj.
Jag tycker inte det är särskilt svårt. Ett kort exempel från hans output
Kod:
1. Initierar däck till att vara 15
2. Skriver ut antalet däck 
(15)
3. Tar ut 20 däck.
4. Skriver ut antalet däck (0
Exempel två
Kod:
1. Initierar fälgar till att vara 10
2. Skriver ut antalet fälgar 
(10)
3. Tar ut 2 fälgar
4. Skriver ut antalet fälgar 
(8
Det han vill är att din kod ska fungera på samma sätt. (Hint: du vill alltså manipulera ditt antal-attribut i TaUt-funktionen.)

Okej blir det såhär då?

Kod:
public int TaUt(int antalTaUt)
        {
            if (antalTaUt > antal)
            {
                return 0;
            }

           int antalFörAttTaUt = antal - antalTaUt;
           return antalFörAttTaUt;
            
        }
Citera
2014-03-09, 22:03
  #2043
Medlem
tj.s avatar
Nej. Återigen ändrar du aldrig antal-attributet. Kika igenom de två exemplen jag skrev utifrån hans output en gång till.
Citera
2014-03-09, 22:09
  #2044
Medlem
tj.s avatar
För övrigt skulle jag starkt rekommendera att du använder dig av this när du använder dig av medlemsattribut. Blir lättare att skilja dem från övriga variabler då.
Citera
2014-03-09, 23:27
  #2045
Medlem
Citat:
Ursprungligen postat av tj.
Nej. Återigen ändrar du aldrig antal-attributet. Kika igenom de två exemplen jag skrev utifrån hans output en gång till.

Har faktiskt ingen aning om hur man ska lösa den då.
Citera
2014-03-10, 00:07
  #2046
Medlem
tj.s avatar
Citat:
Ursprungligen postat av pkj
Har faktiskt ingen aning om hur man ska lösa den då.
Som du gjorde innan fast sätta this.antal till 0 respektive summan av subtraktionen och sedan returnera den...
Citera
2014-03-10, 14:15
  #2047
Medlem
Citat:
Ursprungligen postat av tj.
Som du gjorde innan fast sätta this.antal till 0 respektive summan av subtraktionen och sedan returnera den...

Vad menar du med "respektive summan av subtraktionen"? Ska jag sätta antalFörAttTaUt till 0?
Citera
2014-03-10, 17:21
  #2048
Medlem
Citat:
Ursprungligen postat av pkj
Vad menar du med "respektive summan av subtraktionen"? Ska jag sätta antalFörAttTaUt till 0?
Tycker att du ska sätta dig ned och skriva ned med antingen ord eller pseudokod hur funktionen/metoden ska fungera. Du kan även skriva det som kommentarer i metoden och sedan skriva programmet runt dessa.
Programmet är till för att hålla reda på lagersaldot (antalet) för olika reservdelar.
Hur är det tänkt att metoden TaUt(antalTaUt) ska fungera?
Lagersaldot (antalet) ska minskas med de uttagna delarna (antalTaUt) och TaUt ska returnera hur många delar som verkligen togs ut (man kan ej ta ut fler delar än som finns på lager).
Med vilka värden kan användare anropa metoden? Jag skulle dela upp det i tre fall.
1. Användaren anropar TaUt med ett negativt värde eller 0 (antalTaUt <= 0). I detta fall behöver TaUt inte göra något då lagersaldot ej ändras. Returnera 0 eftersom inget togs ut.
2. Användaren tar ut färre delar än som finns på lagret (antalTaUt <= antal). Uppdaterar nya lagersaldot (antal = antal - antalTaUt) och returnera hur många som togs ut (antalTaUt).
3. Användaren försöker ta ut fler delar än som finns på lagret (antalTaUt>antal). Nu blir nya lagersaldot tomt eftersom alla delar tas ut. Spara först tidigare lagersaldo eftersom du ändrar det och sedan ska returnera det (tidigareAntal = antal). Därefter tömmer du lagret (antal = 0). Slutligen returnerar du hur många delar som kunde tas ut innan lagret blev tomt (tidigareAntal).
Citera
2014-03-10, 17:45
  #2049
Medlem
Citat:
Ursprungligen postat av DieTrolle
Tycker att du ska sätta dig ned och skriva ned med antingen ord eller pseudokod hur funktionen/metoden ska fungera. Du kan även skriva det som kommentarer i metoden och sedan skriva programmet runt dessa.
Programmet är till för att hålla reda på lagersaldot (antalet) för olika reservdelar.
Hur är det tänkt att metoden TaUt(antalTaUt) ska fungera?
Lagersaldot (antalet) ska minskas med de uttagna delarna (antalTaUt) och TaUt ska returnera hur många delar som verkligen togs ut (man kan ej ta ut fler delar än som finns på lager).
Med vilka värden kan användare anropa metoden? Jag skulle dela upp det i tre fall.
1. Användaren anropar TaUt med ett negativt värde eller 0 (antalTaUt <= 0). I detta fall behöver TaUt inte göra något då lagersaldot ej ändras. Returnera 0 eftersom inget togs ut.
2. Användaren tar ut färre delar än som finns på lagret (antalTaUt <= antal). Uppdaterar nya lagersaldot (antal = antal - antalTaUt) och returnera hur många som togs ut (antalTaUt).
3. Användaren försöker ta ut fler delar än som finns på lagret (antalTaUt>antal). Nu blir nya lagersaldot tomt eftersom alla delar tas ut. Spara först tidigare lagersaldo eftersom du ändrar det och sedan ska returnera det (tidigareAntal = antal). Därefter tömmer du lagret (antal = 0). Slutligen returnerar du hur många delar som kunde tas ut innan lagret blev tomt (tidigareAntal).

Okej tack så mycket för svaret, förstår lite bättre nu. Men det enda jag inte förstod är det där med tidigareAntal. Ska jag skapa en ny variabel tidigareAntal som jag sätter till antal innan sista else if-satsen? Och vad ska jag returnera efter alla satser för man måste ju avsluta metoden/funktionen med någon return.
Citera
2014-03-10, 17:56
  #2050
Medlem
sepebarns avatar
Citat:
Ursprungligen postat av pkj
man måste ju avsluta metoden/funktionen med någon return.
Nej, det måste man inte.
Citera
2014-03-10, 18:58
  #2051
Medlem
Citat:
Ursprungligen postat av pkj
Okej tack så mycket för svaret, förstår lite bättre nu. Men det enda jag inte förstod är det där med tidigareAntal. Ska jag skapa en ny variabel tidigareAntal som jag sätter till antal innan sista else if-satsen? Och vad ska jag returnera efter alla satser för man måste ju avsluta metoden/funktionen med någon return.
För att skilja på de tre olika fallen räcker det med två if-satser. I första if-satsen kan du kolla för fall 1. I andra if-satsen kollar du fall 2. Om inte fall 2 är uppfyllt så betyder det automatiskt att fall 3 är uppfyllt (ty om inte (antalTaUt <= antal) gäller så måste (antalTaUt>antal) gälla).
Så strukturen skulle kunna bli:
Kod:
if(case 1) { 
     // returnera värdet
}
if(case 2) {
    // Uppdatera saldo
    // returnera hur många delar som plockades ut
}
// Om du passerar detta så vet du att fall 3 gäller, d v s antalTaUt>antal
   // Spara värdet på lagersaldot
   // Uppdatera lagersaldot
   // returnera det undansparade värdet
Citera
2014-03-10, 19:16
  #2052
Medlem
Citat:
Ursprungligen postat av DieTrolle
För att skilja på de tre olika fallen räcker det med två if-satser. I första if-satsen kan du kolla för fall 1. I andra if-satsen kollar du fall 2. Om inte fall 2 är uppfyllt så betyder det automatiskt att fall 3 är uppfyllt (ty om inte (antalTaUt <= antal) gäller så måste (antalTaUt>antal) gälla).
Så strukturen skulle kunna bli:
Kod:
if(case 1) { 
     // returnera värdet
}
if(case 2) {
    // Uppdatera saldo
    // returnera hur många delar som plockades ut
}
// Om du passerar detta så vet du att fall 3 gäller, d v s antalTaUt>antal
   // Spara värdet på lagersaldot
   // Uppdatera lagersaldot
   // returnera det undansparade värdet

Okej blir det såhär då?

Kod:
public int TaUt(int antalTaUt)
        {

            if (antalTaUt <= 0) // Lagersaldot ändras inte eftersom man inte tar ut något, så då returnerar man 0 eftersom inget togs ut
            {
                return 0;
            }

            else if (antalTaUt <= antal) // Tar ut färre än vad som finns i lagret
            {
                antal = antal - antalTaUt; // Uppdaterar nya lagersaldot
                return antalTaUt; // Returnera hur många som togs ut
            }

            int tidigareAntal = antal;
            antal = 0;
            return tidigareAntal;
            
        }
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback