Avatar billede ttn- Nybegynder
26. oktober 2003 - 21:12 Der er 25 kommentarer og
1 løsning

Boolean i en string

public class Opgave2
{
    //Laver en public string
    //Og derinde er der en array
    //Som viser "månedens tal dato"
    public String maaned(int maan)
    {
        String[] MaanedDato = { "0", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12" };
        return MaanedDato[maan];
    }
    //laver igen en public integer
    //Og derinde er der også en array
    //Som viser hvor mange dage
    //Der er på i den pågældende måned
    public int dpm(int mon, int aar)
    {
        int[] DagePerMaaneder = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 };
        int res = DagePerMaaneder[mon];
        if((mon == 2) && skudaar(aar)) res++;
        return res;
    }
    //Laver igen igen en public integer
    //Og derinde er der igen igen(:)) en array
    //Som indeholder de antal dage, som der højst kan være i en måned
    public int dage(int dag)
    {
        int[] AntalDage = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 };
        return AntalDage[dag];
    }
    //En public void, som ser om int aar er et skudaar
    public boolean skudaar(int aar)
    {
        if( aar % 400 == 0 )
        {
        System.out.println(aar + " - det er skudaar!");
        return true;
        }
        else if( aar % 100 == 0 )
        {
          System.out.println(aar + " - det er ikke skudaar!");
          return true;
          }       
          else if( aar % 4 == 0 )
        {
          System.out.println(aar + " - det er skudaar!");
          return true;
        }
        else
          {
          System.out.println(aar + " - det er ikke skudaar!");
          return true;
          }
      }
}


og min anden class:

public class Opgave2kontrol
{
    public static void main(String args[])
    {       
        Opgave2 k = new Opgave2();
        System.out.print("Vi er i aar "); k.skudaar(2003);
        System.out.println("Vi er i maaned " + k.maaned(8));
        System.out.println("Maaned " + k.maaned(8) + " indeholder " + k.dpm(8, 2003) + " dage");
        System.out.println("Idag er det den " + k.dage(10) + ". dag i maaned " + k.maaned(8));
        String DDMMYYYY = k.dage(10) + "/" + k.maaned(8) + "/";
        System.out.print(DDMMYYYY); k.skudaar(2003);
    }
}
       
   
Problemet er, at jeg skal kunne hive en dato frem i DDMMYYYY, men da min "skudaar" er en boolean, så kan jeg ikke få den ned i min string, uden den laver fejl. En idé?
Avatar billede erikjacobsen Ekspert
26. oktober 2003 - 21:14 #1
Din skudårsfunktion ser sjov ud - du siger aldrig return false;
Avatar billede ttn- Nybegynder
26. oktober 2003 - 21:17 #2
hov, ja det var så en fejl :)
Avatar billede erikjacobsen Ekspert
26. oktober 2003 - 21:21 #3
Når nu du returnerer en værdi, så kan du bare

  System.out.println(k.skudaar(2003));

eller

  System.out.println("Svaret er "+k.skudaar(2003));

men din nuværende funktion vil så både skrive ud og aflevere et
resulatet. Det er rodet. Generelt: adskil beregning og præsentation.
Avatar billede ttn- Nybegynder
26. oktober 2003 - 21:24 #4
Jo, men jeg skal have den til at skrive, hvis det er skudår og jeg kunne ikke lige finde andre muligheder, da alt skal kunne hives frem ved at ændre på en variable. Derudover skal "k.skudaar(2003" være uden for System.out.println();, da den ellers vil melde fejl! Det er faktisk noget af det, som jeg spørger om :)
Avatar billede erikjacobsen Ekspert
26. oktober 2003 - 21:28 #5
Tidligere havde du

  public void skudaar

og så skal den være udenfor. Men ellers er det mest normalt

  if (k.skudaar(2003))  { ...

og så gøre 2 forskellige ting
Avatar billede ttn- Nybegynder
26. oktober 2003 - 21:30 #6
Okay, vil lige prøve at lege lidt med det!
Avatar billede ttn- Nybegynder
26. oktober 2003 - 21:32 #7
public boolean skudaar(int aar)
    {
        if( aar % 400 == 0 ) {
        System.out.println(aar + " - det er skudaar!");
        return true;
        }
        else if( aar % 100 == 0 ) {
        System.out.println(aar + " - det er ikke skudaar!");
          return false;
          }
          else if( aar % 4 == 0 ) {
          System.out.println(aar + " - det er skudaar!");
          return true;
        }
        else {
          System.out.println(aar + " - det er ikke skudaar!");
          return false;
          }

der skal jeg enten have boolean skudaar om til void skudaar? Eller hvad? :)
Avatar billede erikjacobsen Ekspert
26. oktober 2003 - 21:35 #8
Nej, det skal være "public boolean", for den skal alene lave
beregningen. Den må intet skrive ud (testudskrifter mens man udvikler
er ok).

Tænk på at din funktion også skal kunne bruges i et program der ellers
er på Swahili. Andetsteds sker udskrivningen, og din funktion er altid
den samme.
Avatar billede ttn- Nybegynder
26. oktober 2003 - 21:37 #9
dvs. den skal ikke returnere noget andet end true/false? Altså væk med System.out.println osv.?
Avatar billede ttn- Nybegynder
26. oktober 2003 - 21:48 #10
Nu har jeg fjernet system.out.println linierne i if sætningerne, men nu udskriver den bare "true" i stedet for årstallet...?
Avatar billede arne_v Ekspert
26. oktober 2003 - 21:51 #11
Fjern System.out.println fra skudaar metoden og kald den som:

System.out.println("2003 skudår : " + k.skudaar(2003));
Avatar billede ttn- Nybegynder
26. oktober 2003 - 21:53 #12
hvor i koden er det? Jeg er blevet pænt forvirret af min egen kode - sådan går det, når man er for træt :)!
Avatar billede ttn- Nybegynder
26. oktober 2003 - 21:58 #13
Okay, fandt ud af den nu... skulle bare lige tænke mig om... altså det du skrev om arne. Mit problem er bare, at jeg jo skal have det stående i en DD MM YYYY datoformat, så hvordan satan gør jeg det? :|
Avatar billede arne_v Ekspert
26. oktober 2003 - 22:13 #14
Erstatter:

String DDMMYYYY = k.dage(10) + "/" + k.maaned(8) + "/";
System.out.print(DDMMYYYY); k.skudaar(2003);

med:

System.out.println(k.dage(10) + "/" + k.maaned(8) + "/" + 2003);

f.eks. !
Avatar billede arne_v Ekspert
26. oktober 2003 - 22:14 #15
Jeg kan iøvrigt ikke helt se nytten af metoden dage !?
Avatar billede ttn- Nybegynder
27. oktober 2003 - 14:04 #16
Den der antal dage? Den skal jo være der, så jeg kan hive en dag frem.
Og jeg kan ikke skrive + 2003 bagefter, jeg skal jo kunne hive et nyt tal frem, hvis variablen ændrer sig.
Avatar billede arne_v Ekspert
27. oktober 2003 - 14:15 #17
Jo men metoden returnerer jo det samme osm argumentet.

Hvad er forskellen på
  k.dage(10) + "/"
og:
  10 + "/"
?
Avatar billede ttn- Nybegynder
27. oktober 2003 - 15:30 #18
Det er rigtigt nok, men jeg skal kalde det sådan, gemme det i en string, som så skal printe det ud!
Avatar billede arne_v Ekspert
27. oktober 2003 - 15:40 #19
Skulle dage så ikke returnere String i.s.f. int ?
Avatar billede ttn- Nybegynder
27. oktober 2003 - 17:14 #20
i.s.f? Hvad mener du?

Men min boolean metode, kan den ikke laves om til et eller andet, så k.skudaar kan komme ind i min string? :|
Avatar billede arne_v Ekspert
27. oktober 2003 - 18:39 #21
i.s.f. = i stedet for
Avatar billede arne_v Ekspert
27. oktober 2003 - 18:56 #22
Og k.skudaar kan jo udprintes med:

System.out.println("2003 skudår : " + k.skudaar(2003));
Avatar billede ttn- Nybegynder
27. oktober 2003 - 21:15 #23
Du misforstår mig måske. Min kode er som sådan okay, men jeg skal ud fra min kode samle det hele i en streng, hvilket jeg ikke kan med k.skudaar(2003), da den simpelthen nægter det!
Avatar billede arne_v Ekspert
27. oktober 2003 - 21:55 #24
DDMMYYYY skal jo ikke bruge om 2003 er et skudår men derimod selve året 2003.
Avatar billede cordack Nybegynder
28. oktober 2003 - 03:38 #25
Problemet er at du både vil bruge skudaar() til at check om et år er et skudår, som f.eks:

if((mon == 2) && skudaar(aar)) res++;

Samtidig med at du vil have den til at retunere en tekst.
Hvis du ikke vil rette for meget i din kode kan du løse det ved at lave en ekstra metode. Så du har følgende:

class Opgave2
.
.
.
    //En public void, som ser om int aar er et skudaar
    public boolean skudaar(int aar)
    {
        if( aar % 400 == 0 )
        {
//        System.out.println(aar + " - det er skudaar!");
        return true;
        }
        else if( aar % 100 == 0 )
        {
//          System.out.println(aar + " - det er ikke skudaar!");
          return false;
          }       
          else if( aar % 4 == 0 )
        {
//          System.out.println(aar + " - det er skudaar!");
          return true;
        }
        else
          {
//          System.out.println(aar + " - det er ikke skudaar!");
          return false;
          }
      }

    public String skudaar2(int aar)
    {
        if (skudaar(aar))
            return aar + " - det er skudaar!";
        else
            return aar + " - det er ikke skudaar!";   
    }



public class Opgave2kontrol
{
    public static void main(String args[])
    {       
        Opgave2 k = new Opgave2();
        System.out.println("Vi er i aar "+ k.skudaar2(2003));
        System.out.println("Vi er i maaned " + k.maaned(8));
        System.out.println("Maaned " + k.maaned(8) + " indeholder " + k.dpm(8, 2003) + " dage");
        System.out.println("Idag er det den " + k.dage(10) + ". dag i maaned " + k.maaned(8));
        String DDMMYYYY = k.dage(10) + "/" + k.maaned(8) + "/" + k.skudaar2(2003);
        System.out.println(DDMMYYYY);
    }
}

Dette giver følgende resultat når du kører dit program:

Vi er i aar 2003 - det er ikke skudaar!
Vi er i maaned 08
Maaned 08 indeholder 31 dage
Idag er det den 10. dag i maaned 08
10/08/2003 - det er ikke skudaar!
Process Exit...
Avatar billede ttn- Nybegynder
28. oktober 2003 - 14:14 #26
Takker mange gange, fandt faktisk ud af det før, men derfor skal du stadig have dine point! :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester