Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Ongelma Java harjoituksen kanssa, osaisiko joku auttaa

Sivun loppuun

Mikkis75 [09.11.2004 13:34:34]

#

Mikäs mulla on tuon ao ohjelmanpätkän kanssa ongelmana? Iski sokeus eikä löydy virheet! Ja palauttaakin pitäisi toimivana harjoituksena.
Oon jakanut interfeissin, luokat ja ohjelmat tässä kommenttiviivalla, "oikeasti" ne on omia kokonaisuuksiaan.

Yksinkertainen on tietysti kaunista, olisiko muita ajatuksia homman toteutukseen...
Ilman määrittelyä, toivottavasti ajatus selviää koodista :)

public interface Muoto
{
  public static final double PII = 3.14;
  public int pinta_ala();
}
import java.math.*;

// Tämä luokka on Muoto-luokan aliluokka
class Suorakulmio implements Muoto
{
  // Muuttujat
  private double korkeus, leveys;
  // Rakentaja
  public Suorakulmio()
  {
    korkeus = 0;
    leveys = 0;
  }
  // Funktiot, joilla asetetaan korkeus ja leveys
  public void aseta_korkeus (Double annettu_korkeus)
  {
    korkeus = annettu_korkeus.doubleValue();
  }
  public void aseta_leveys (Double annettu_leveys)
  {
    leveys = annettu_leveys.doubleValue();
  }
  // Muoto rajapinnan pinta-ala funktio
  public int pinta_ala()
  {
    // Laskee pinta-alan ja palauttaa lasketun arvon
    return (int) Math.round(korkeus * leveys);
  }
}
import java.math.*;
// Tämä luokka on Muoto-luokan aliluokka
class Ympyra implements Muoto
{
  // Muuttuja
  public double radius;
  // Rakentaja
  public Ympyra()
  {
    radius = 0;
  }
  // Funktio, jolla asetetaan säde
  public void aseta_sade(Double annettu_sade)
  {
    radius = annettu_sade.doubleValue();
  }
  // Muoto rajapinnan pinta-ala funktio
  public int pinta_ala()
  {
    // Laskee pinta-alan ja palauttaa lasketun arvon
    return (int) Math.round (PII * radius * radius);
  }
}
import java.io.*;

public class Ohjelma
{
  public static void main(String argv[])
  {
    // Muuttujat
    String stringi;
    int int_tyyppi;
    int pinta_ala = 0;
    // SYötteidenluku
    BufferedReader syote = new BufferedReader(new InputStreamReader(System.in));

    // Kysytään lasketaanko ympyrän vai suorakulmion ala
    System.out.println("Lasketaanko pinta-ala ympyralle (1) vai suorakulmiolle (2)?");
    stringi = syote.readLine();
    // Muutetaan integer-tyypiksi ja ilmoitetaan virheellisestä valinnasta
    try
    {
      int_tyyppi = Integer.parseInt(stringi);
    }
    catch (Exception e)
    {
      System.out.println();
      System.out.println("Et syöttänyt numeroa");
      return;
    }

    // YMPYRÄVASTAUS OSUUS
    if (int_tyyppi == 1)
    {
      Double sade;
      // Kysytään ympyrän säde
      System.out.println("Anna ympyran sade ?");
      stringi = syote.readLine();
      // Muutetaan vastaus Double-tyyppiseksi ja ilmoitetaan virheistä
      try
      {
        sade = Double.valueOf(stringi);
      }
      catch (Exception e)
      {
        System.out.println();
        System.out.println("Et syöttänyt numeroa");
        return;
      }
      // Lasketaan pinta-ala ja asetetaan säde ympyräluokan funtioilla
      // ja sijoitetaan lopputulos pinta_ala-muuttujaan
      Ympyra y = new Ympyra();
      y.aseta_sade(sade);
      pinta_ala = y.pinta_ala();
    }

    // SUORAKAIDEVASTAUS OSUUS
    else if (int_tyyppi == 2)
    {
      Double pituus;
      Double korkeus;
      // Kysytään suorakulmion sivun pituus ja ilmoitetaan virheistä
      System.out.println("Anna suorakulmion sivun pituus ?");
      stringi = syote.readLine();
      // Muutetaan vastaus Double-tyyppiseksi ja ilmoitetaan virheistä
      try
      {
        pituus = Double.valueOf(stringi);
      }
      catch (Exception e)
      {
        System.out.println();
        System.out.println("Et syöttänyt numeroa");
        return;
      }
      // Kysytään suorakulmion korkeutta ja ilmoitetaan virheistä
      System.out.println("Anna suorakulmion korkeus ?");
      stringi = syote.readLine();
      // Muutetaan vastaus Double:ksi ja ilmoitetaan virheistä
      try
      {
        korkeus = Double.valueOf(stringi);
      }
      catch (Exception e)
      {
        System.out.println();
        System.out.println("Et syöttänyt numeroa");
        return;
      }
      // Asetetaan korkeus ja pituus, lasketaan pinta-ala ja sijoitetaan lopputulos
      // pinta_ala-muuttujaan suorakulmaluokan funtioita hyväksikäyttäen
      Suorakulmio s = new Suorakulmio();
      s.aseta_leveys(pituus);
      s.aseta_korkeus(korkeus);
      pinta_ala = s.pinta_ala();
    }
    // Väärin vastattu, poistutaan ohjelmasta
    else
    {
      System.out.println("Vastattava vain numeroin");
      return;
    }
    // Tulostetaan pinta-ala
    System.out.println("Pinta-ala on " + pinta_ala + " neliota");
  }
}

T.M. [09.11.2004 14:07:30]

#

50€ palkaksi sille joka tuon debuggaa.

Vai käsitinkö jonkin asian väärin?

ajv [09.11.2004 14:41:50]

#

Kooditagit ois aika kova sana, eihän tuosta ota erkkikään selvää...

tsuriga [09.11.2004 19:12:51]

#

Myös virheiden antaminen olisi kova juttu, olisi paljon nopeampaa kuin, että jokainen auttaja debugittaa tota. Kääntyykö se, mitä se tulostaa, mitä virheilmoituksia etc. Miksi metodeille pitää double tuoda luokassa?

 catch (Exception e)
{
System.out.println();
System.out.println("Et syöttänyt numeroa");

Virhe voi olla tuossa mikä tahansa.

maka78 [10.11.2004 17:30:19]

#

No toihan on ihan hirveetä toi koodi mut noi sun
readLine():es pitää olla try catch:in sisällä (jokainen) ja sit toi stringi muuttuja kantsii alustaa esim String stringi = "";

Ja sit kannattaa miettii tota Muoto interface:a et olisko parempi tehdä se abstractiks luokaks

Mikkis75 [10.11.2004 18:27:21]

#

maka78:lle kiitti, muokkasin kotona kiireessä ja noi try-catchit meni vähän väärään väliin (tai niitä itse asiassa jäi pois)

Ja tosiaan, näyttää ihan hirveälle! Sisennykset jäi johonkin lähetettäessä tuo viritys tänne sivuille. Ja sisältö... se nyt on varmaan karseaa, eka kerta ku javalla jotain väsään.

ajv [10.11.2004 20:13:53]

#

Mikkis75 kirjoitti:

Sisennykset jäi johonkin lähetettäessä tuo viritys tänne sivuille.

HTML-muotoilu ei tunne sisennyksiä, sen takia koodi on laitettava [code] ja [/code]-tagien väliin, jolloin foorumi osaa muotoilla siihen ne sisennykset.

Sami [10.11.2004 21:52:00]

#

Ei ne sisennykset varsinaisesti minnekään ole kadonnut. Ne näkyy ainakin view sourcella tai sitten lainaamalla tuon tekstin. (tai sitten pasteaa tuon koodin johonkin editoriin ja antaa sen sisentää koodi uudestaan)

Mikkis75 [13.11.2004 12:23:21]

#

Tuossa alla korjailtu versio koodista, tätä sen siis piti tehdä... Kääntyy ja tekee määritelmän mukaiset temput, itse koodista puolestaan, no ei edelleenkään kaunista.

public interface Muoto
{
  public static final double pii = 3.14;
  public int pinta_ala();
}

////////////////////////////////////7

import java.math.*;

// Tämä luokka on Muoto-luokan aliluokka
class Ympyra implements Muoto
{
  // Muuttuja säde
  public double sade;
  // Rakentaja Ympyrä
  public Ympyra()
  {
    sade = 0;
  }
  // Funktio, jolla asetetaan säde
  public void aseta_sade(Double asetettu_sade)
  {
    sade = asetettu_sade.doubleValue();
  }
  // muoto rajapinnan pinta-ala funktio
  public int pinta_ala()
  {
    // Laskee pinta-alan ja palauttaa lasketun arvon
    return (int) Math.round (sade * sade * pii);
  }
}

///////////////////////////////////////////

// Tämä luokka on Muoto-luokan aliluokka
class Suorakulmio implements Muoto
{
  // Muuttujat
  private double sivu1;
  private double sivu2;
  // Rakentaja
  public Suorakulmio()
  {
    sivu1 = 0;
    sivu2 = 0;
  }
  // Funktiot, joilla asetetaan sivujen pituudet
  public void aseta_sivu1 (Double asetettu_sivu1)
  {
    sivu1 = asetettu_sivu1.doubleValue();
  }
  public void aseta_sivu2 (Double asetettu_sivu2)
  {
    sivu2 = asetettu_sivu2.doubleValue();
  }
  // muoto rajapinnan pinta-ala funktio
  public int pinta_ala()
  {
    // Laskee pinta-alan ja palauttaa lasketun arvon
    return (int) Math.round(sivu1 * sivu2);
  }
}

////////////////////////////////////////

import java.io.*;

public class Ohjelma
{
  public static void main(String argv[])
  {
    String vastaus;
    int muunnettu_vastaus;
    int pinta_ala = 0;

    BufferedReader syote = new BufferedReader(new InputStreamReader(System.in));

    // Lasketaan ympyrän tai suorakulmion pinta-ala
    try
    {
      System.out.println();
      System.out.println("Lasketaanko pinta-ala");
      System.out.println();
      System.out.println("ympyralle ( valitse 1)");
      System.out.println();
      System.out.println("vai suorakulmiolle (valitse 2)");
      vastaus = syote.readLine();

      // Muutetaan vastauksen tyyppiä valinta vertailua varten
      muunnettu_vastaus = Integer.parseInt(vastaus);
    }
    catch (Exception e)
    {
      System.out.println("Kayta lukua 1 tai 2");
      return;
    }

    // Ympyrävastausosuus
    if (muunnettu_vastaus == 1)
    {
      Double sade;
      // Kysytään ympyrän säde
      try
      {
        System.out.println();
        System.out.println("Anna ympyran sade:");
        vastaus = syote.readLine();
        sade = Double.valueOf(vastaus);

        // Annetaan virhevalinnan ilmoitus, jos valitaan negatiivinen säde
        if (sade < 0)
        {
          System.out.println();
          System.out.println("Kayta positiivisia lukuja");
          return;
        }
      }
      catch (Exception e)
      {
        System.out.println();
        System.out.println("Kayta lukuarvoja");
        return;
      }
      // Lasketaan luokan Ympyra funtioilla pinta-ala ja sijoitetaan tulos muuttujaan pinta_ala
      Ympyra y = new Ympyra();
      y.aseta_sade(sade);
      pinta_ala = y.pinta_ala();
    }

    // Suorakaidevastausosuus
    else if (muunnettu_vastaus == 2)
    {
      Double sivu1;
      Double sivu2;

      // Kysytään suorakulmion 1. sivun pituutta
      try
      {
        System.out.println();
        System.out.println("Syota ensimmaisen sivun pituus:");
        vastaus = syote.readLine();
        sivu1 = Double.valueOf(vastaus);

        // Annetaan virhevalinnan ilmoitus,
        // jos valitaan negatiivinen 1. sivunpituus
        if (sivu1 < 0)
        {
          System.out.println();
          System.out.println("Kayta positiivisia lukuja");
          return;
        }
      }
      catch (Exception e)
      {
        System.out.println();
        System.out.println("Kayta lukuarvoja");
        return;
      }
      // Kysytään suorakulmion 2. sivun pituutta
      try
      {
        System.out.println();
        System.out.println("Syota toisen sivun pituus:");
        vastaus = syote.readLine();

        sivu2 = Double.valueOf(vastaus);

        if (sivu2 < 0)
        {
          System.out.println();
          System.out.println("Kayta positiivisia lukuja");
          return;
        }
      }
      catch (Exception e)
      {
        System.out.println();
        System.out.println("Kayta lukuarvoja");
        return;
      }
      // Lasketaan luokan Suorakulma funtioilla pinta-ala ja sijoitetaan tulos muuttujaan pinta_ala
      Suorakulmio s = new Suorakulmio();
      s.aseta_sivu1(sivu1);
      s.aseta_sivu2(sivu2);
      pinta_ala = s.pinta_ala();
    }

    // Tehdään virhevalinnan vertailut, jos valitaan yli 2 tai negatiivinen luku
    else if (muunnettu_vastaus > 2)
    {
      System.out.println();
      System.out.println("Kayta valinnassa lukuja 1 tai 2");
      return;
    }
    else if (muunnettu_vastaus < 1)
    {
      System.out.println();
      System.out.println("Kayta valinnassa lukuja 1 tai 2");
      return;
    }
  // Tulostetaan näytölle laskun tulos
  System.out.println();
  System.out.println("Pinta-ala on " + pinta_ala + " m2");
  }
}

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta