Java objektumok – Könyv megoldása

Csak akkor olvass tovább, ha a Könyv feladatot megoldottad, vagy nem sikerült megoldani.

Az alap feladatot a fenti linken megtalálod. A feladatban több helyen írtam megjegyzéseket, hogy könnyebben követhető legyen a feladat megoldása. Ha jól megnézed a feladatot, akkor a hibakezelés a program legnagyobb része, a tényleges programműködés (változók kezelése) ehhez képest jóval kevesebb. A feladat megoldását NetBeans project formában innen letöltheted.

Könyv objektum

/**
 *
 * @author http://webotlet.hu
 */
package webotlet_konyv;

public class Konyv
{

  int oldalszam;
  int aktualis;
  boolean nyitva;

  public Konyv()
  {
    oldalszam = (int) (Math.random() * 101)+50;
    aktualis = 0;
    nyitva = false;
  }

  public void kinyit()
  {
    if( nyitva )
    {
      System.out.println( "A konyv mar nyitva van." );
      return;
    }
    nyitva = true;
// [1;oldalszam]
    aktualis = (int) (Math.random() * oldalszam) + 1;
    System.out.println( "Kinyitottad a konyvet a "+aktualis+
                        " oldalon." );
  }

  public void bezar()
  {
    if( !nyitva )
    {
      System.out.println( "A konyv mar be van zarva." );
      return;
    }
    nyitva = false;
    aktualis = 0;
    System.out.println( "Bezartad a konyvet." );
  }

  public void nez()
  {
    if( nyitva )
    {
      System.out.println( "A konyv nyitva van a "+aktualis+
                          " oldalon." );
    }

    else
    {
      System.out.println( "A konyv zarva van." );
    }
  }

  public void lapoz( int irany )
  {
    if( nyitva == false )
    {
      System.out.println( "A konyv zarva van, nem lapozhato." );
      return;
    }

// elore lapozas
    if( irany > 0 )
    {
      aktualis++;
      System.out.println( "Lapoztal egyet hatra." );
    }
// egyebkent hatra lapozas
    else
    {
      aktualis--;
      System.out.println( "Lapoztal egyet elore." );
    }

    if( aktualis == 0 || aktualis == oldalszam + 1 )
    {
      bezar();
    }
  }

  public void porget( int irany )
  {
    int elozo, mennyit;
    if( nyitva == false )
    {
      System.out.println( "A konyv zarva van, nem porgetheto." );
      return;
    }
    
    elozo = aktualis;

// elore porgetes
    if( irany > 0 )
    {
      if( aktualis == oldalszam )
      {
        System.out.println( "Mar az utolso oldalon tartasz, arra "+
                            "nem porgetheted." );
        return;
      }
// a fennmarado oldalak [aktualis+1;oldalszam]
      mennyit = (int)(Math.random()*(oldalszam-aktualis))+aktualis+1;
      aktualis = mennyit;
      System.out.println( "Hatra porgettel "+
                          Math.abs(elozo-aktualis)+" oldalt." );
    }
// egyebkent hatra fele porgetes
    else
    {
      if( aktualis == 1 )
      {
        System.out.println( "Mar az elso oldalon tartasz, arra "+
                            "nem porgetheted." );
        return;
      }
// lehetseges oldalak [1;aktualis-1]
      mennyit = (int)(Math.random()*(aktualis-1))+1;
      aktualis = mennyit;
      System.out.println( "Elore porgettel "+
                          Math.abs(elozo-aktualis)+" oldalt." );
    }
  }

  @Override
  public String toString()
  {
    return "Konyv{" + "oldalszam=" + oldalszam + ", aktualis=" +
           aktualis + ", nyitva=" + nyitva + '}';
  }
 
}

Vezérlő objektum

/**
 *
 * @author http://webotlet.hu
 */
package webotlet_konyv;

public class Webotlet_Konyv
{
  public static void main( String[] args )
  {
    Konyv k1 = new Konyv();
    System.out.println( k1 );
    k1.kinyit();
    k1.kinyit();
    k1.nez();
    k1.lapoz( 1 );
    k1.nez();
    k1.bezar();
    k1.bezar();
    k1.kinyit();
    k1.lapoz( 1 );
    k1.nez();
    k1.porget( 1 );
    k1.nez();
    k1.porget( 1 );
    k1.nez();
    k1.porget( 1 );
    k1.nez();
    k1.porget( 1 );
    k1.nez();
  }
}

2 Replies to “Java objektumok – Könyv megoldása”

  1. Udv!
    Csak kezdo programozo vagyok, ezert elore is elnezest kerek, ha a kerdesem primitiv.
    Addig ertem, hogy a konyv alapalapotban zarva van amit a konstruktorban ”nyitva = false”-al allitunk be . De miert van az, hogy a kinyit() metodus if-jeben ”if(nyitva)”, aminek erteke false es a program megis a ”nyitva = true” allitast veszi figyelembe.
    Csak a hibakezeles miatt kell odatenni? Elore is koszi a valaszt. Amugy nagyon jo az oldal, csak igy tovabb.

    • Amikor ki akarom nyitni a könyvet, meg kell vizsgálnom az aktuális állapotát. Valóban jól látod, a hibakezelés miatt van ott az első if. Nem nyithatom ki kétszer.

      Ha már eleve nyitva van: if( nyitva ) …. akkor nem tudom kinyitni még egyszer, és itt meg is áll a dolog. (az nyitva továbbra is true marad)

      Ha ez az állítás hamis (zárva van), akkor jut csak el a program az if utáni nyitva = true; sorhoz, vagyis jelzem, most nyitottam ki.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

*

Ez a weboldal az Akismet szolgáltatását használja a spam kiszűrésére. Tudjunk meg többet arról, hogyan dolgozzák fel a hozzászólásunk adatait..