Miten nollan saa vertailusta pois?

Aloitteleva_javamies

Ohjelma kysyy lukuja niin kauan, kunnes käyttäjä syöttää nollan. Sitten ohjelman pitäisi tulostaa syötetyistä luvuista pienin ja suurin. Homma toimii muuten, mutta ohjelmani huomioi vertailuissa nollan. Eli joka ikisellä kerralla pienin luku on aina 0. Kysymys kuuluu: Mitä koodissa pitää korjata, jotta nollaa ei huomioida vertailussa.

Tässä koodini:
{

public static void main (String[] args)

{

int luku, suurin=0, pienin=0;

do
{
System.out.println("Anna lukuja, 0 lopettaa:");
luku=Lue.kluku();

if (luku<pienin)
{
pienin=luku;
}
if (luku>suurin)
{
suurin=luku;
}

}while(luku!=0);

System.out.println("Suurin luku oli " suurin " ja pienin luku oli " pienin);

}
}

30

2904

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • testaappa

      Oisko :)
      if (luku<pienin && luku !=0)

      • Aloitteleva_javamies

        Edelleen se ilmoittaa joka kerta, että pienin luku on 0.


      • Nokun
        Aloitteleva_javamies kirjoitti:

        Edelleen se ilmoittaa joka kerta, että pienin luku on 0.

        Laitat sen pienimmän heti alussa nollaksi


      • testaappa

        No niinpä tietenki ilmoittaa, sorry. Laskuri toimii kyllä kans.
        Tääkin voi toimia. En kyllä testannu
        if (luku<pienin && luku !=0 || (pienin == 0 && suurin == 0))


    • Niinja

      Tuo "pienin" kannattaisi alustaa joksikin muuksi kuin nollaksi ennen looppia.

    • hgfdsasdf

      Lisää muuttujiin laskuri, alkuarvo 0. Loopin alussa, tutkit onko laskuri==0, jos on, sijoitat pienin=luku ja suurin=luku (eka kierros alustaa nämä uudestaan), loopin lopussa kasvatat laskuria.
      Lopussa voit tulostaa nyt myös syötettyjen lukujen määrän (laskurin).

      • Aloitteleva_javamies

        Laskuri-muuttujalla kikkailu toimi. Nyt ei 0 enää huomioida arviossa.


      • erästapa
        Aloitteleva_javamies kirjoitti:

        Laskuri-muuttujalla kikkailu toimi. Nyt ei 0 enää huomioida arviossa.

        Eikä tarvitse edes erillistä laskuria, jos hyödyntää suurimman tai pienimmän alkuarvoa 0. Nollahan ei tässä tapauksessa ole hyväksyttävien joukossa, joten ensimmäisellä kierroksella sekä suurin ja pienin saa ensimmäisen luvun arvon. Vähän tähän tapaan:

        import java.util.Scanner;
        class Kysy {
            public static void main (String[] args)
            {
                Scanner lue=new Scanner(System.in);
                int luku, suurin=0, pienin=0;
                do
                {
                    System.out.println("Anna lukuja, 0 lopettaa:");
                    luku=lue.nextInt();
                    if (luku!=0) {
                        if (suurin==0)
                        {
                            suurin=luku;
                            pienin=luku;
                        }
                        else
                        {
                            if (luku<pienin) pienin=luku;
                            if (luku>suurin) suurin=luku;
                        }
                    }
                } while (luku!=0);
                if (suurin!=0)
                {
                    System.out.println("Suurin luku oli " suurin " ja pienin luku oli " pienin);
                }
            }
        }


    • limitit

      Laita ensin suurin pienimmäksi ja pienin suurimmaksi?

      int suurin = Integer.MIN_VALUE;
      int pienin = Integer.MAX_VALUE;

    • not-a-number

      Miksi juuri nollan pitäisi lopettaa?
      Silloinhan nollaan ei voi verrata.

      Miksei lopetusmerkki voisi olla mikä hyvänsä merkki, mutta ei numero?

      NaN.

    • eksyttiin.tieltä

      Tästä voisi varmaan jonkun vuokaavion kehitellä. Logiikka menee että ensin ei tietysti ole mitään lukuja, koska ei ole esitetty edes kysymystä. Mutta vähintään kerran on kysyttävä, jos halutaan saada joku tulos. Sen jälkeen kysellään niin pitkään, kunnes lopetellaan kyselyt.

    • Ei hitto toi Java on jäyhää! Miks et tallenna kaikkia annettuja lukuja listaan ja sitten ota siitä miniä ja maksia lopuks?

      • listatsa

        Tiedätkö mitä muisti maksaa? Jos halutaan tietää minimi ja maksimi, niin ei tarvitse jemmata kaikkia maailman lukuja. Ja sitten ihmetellään miksi Suomeenkin tarvitaan jo 4 x 250MW palvelinkeskusta lähivuosina. No kun porukka koodaa höttöä.


      • Turbo-Urpo1

        "minkkilaukku"
        Hyvän lisäosan teit, on ollut joka ikinen päivä hyötyä.
        Oletkos ahertanut mitään uutta tällä välin ?


      • Turbo-Urpo1 kirjoitti:

        "minkkilaukku"
        Hyvän lisäosan teit, on ollut joka ikinen päivä hyötyä.
        Oletkos ahertanut mitään uutta tällä välin ?

        Onhan sitä jotain pientä tullut, mm. mainostenkelaaja Ruutuun ja Katsomoon (nykyinen MTV). Ai niin mä joskus kysyin, että millä ne videomainokset saisi estettyä. En keksinyt miten kokonaan estettyä, mutta miten kelata:

        https://jsfiddle.net/hu7s1rtg/

        Muutin aluks playbackRate:ä, mutta vaihdoin sen niin, että hypätään suoraan loppuun. Aika jähmeästi tuo itellä ainakin toimii ja siinä pitää olla vissiin vähän tarkka millon sitä R:ää painaa, mutta kyllä ne mainokset saa toisinaan hujahtamaan veks.


      • listatsa kirjoitti:

        Tiedätkö mitä muisti maksaa? Jos halutaan tietää minimi ja maksimi, niin ei tarvitse jemmata kaikkia maailman lukuja. Ja sitten ihmetellään miksi Suomeenkin tarvitaan jo 4 x 250MW palvelinkeskusta lähivuosina. No kun porukka koodaa höttöä.

        Ennenaikainen optimointi on kaiken pahan alku ja juuri.


      • ihmeajattelutapa
        minkkilaukku kirjoitti:

        Ennenaikainen optimointi on kaiken pahan alku ja juuri.

        Paska koodi on paskaa koodia optimoi sitä ennen tai jälkeen. Algoritmi pitää miettiä valmiiksi, eikä roiskia miten sattuu. Esimerkiksi testaaminen on täysin turhaa. Testaamisen tarve on osoitus täysin paskasta koodausajattelusta. Testit tehdään koodia tehdessä, eikä jälkikäteen aleta ihmettelemään missä vitussa se vika nyt mahtaa olla. On äärimmäisen noloa, että on jopa sellainen ammattiryhmä kuin testaajat, jotka ovat oikeasti täysin turhaa porukkaa, jos ohjelmoijat tekisivät kunnollista koodia. Paska koodi laittaa kyllä vituttamaan ihan saatanasti. Vai että vielä listoja kahden luvun säilytykseen. Ei saatana. Eipä kyllä tarvi enää ihmetellä miksi suomalaisten softatalojen projektit eivät valmistu koskaan, ja tulos on silti täyttä paskaa. Simppeliä; ei osata tehdä koodia. Resursseja kyllä osataan tuhlata. Vittu jotain kokakolaa juoda.


    • optimoitu

      public static void main (String[] args){
      int luku, suurin=0, pienin=0;
      do{
      System.out.println("Anna lukuja, 0 lopettaa:");
      luku=Lue.kluku();
      if (luku<pienin && luku !=0 || (pienin == 0 && suurin == 0)) {pienin=luku;}
      if (luku<suurin&& luku !=0 || (pienin == 0 && suurin == 0)) {suurin=luku;}
      }while(luku!=0);

      System.out.println("Suurin luku oli " suurin " ja pienin luku oli " pienin);
      }
      }

      • eiskulaa

        Ei tuo toimi lainkaan. Antaa nollat. Ja sitten menee luvut menee miten sattuu.

        Anna lukuja, 0 lopettaa:
        0
        Suurin luku oli 0 ja pienin luku oli 0

        Anna lukuja, 0 lopettaa:
        1
        Anna lukuja, 0 lopettaa:
        0
        Suurin luku oli 0 ja pienin luku oli 1

        Anna lukuja, 0 lopettaa:
        1
        Anna lukuja, 0 lopettaa:
        2
        Anna lukuja, 0 lopettaa:
        0
        Suurin luku oli 0 ja pienin luku oli 1


      • optimoitu

        Joo tämä rivi siis tietenkin pitäisi olla kuten alkuperäisessäkin nuoli toiseen suuntaan.

        if (luku<suurin&& luku !=0 || (pienin == 0 && suurin == 0)) {suurin=luku;}
        -> if (luku>suurin&& luku !=0 || (pienin == 0 && suurin == 0)) {suurin=luku;}


    • Tällä_kertaa_Pascalilla

      Vaikuttaa ihan peruskoulu tehtävältä. En viitsiny tehdä tätä Javalla enkä tehnyt ihan mitä määriteltiin. Mutta tässä on jonkinlainen versio:


      program lukujenluku;
      uses sysutils;
      var
      merkkijono, s1:string;
      luku, suurin, pienin, virhepaikka :integer;
      jatka, virhetilanne : boolean;

      begin
      writeln ('Anna kokonaislukuja. Muu kirjain kuin numero lopettaa lukemisen');
      virhetilanne := false;
      jatka:= true;
      readln( merkkijono );
      val(merkkijono, luku, virhepaikka);
      case virhepaikka of
      0 : jatka := false;
      1 : begin
      jatka := false;
      virhetilanne := true;
      end ;
      else
      begin
      s1:=copy(merkkijono,1,virhepaikka-1);
      delete(merkkijono,1,virhepaikka);
      val(s1, luku, virhepaikka);
      end;
      end;
      suurin := luku;
      pienin := luku;
      while jatka do
      begin
      val(merkkijono, luku, virhepaikka);
      if virhepaikka > 0 then
      begin
      s1:=copy(merkkijono,1,virhepaikka-1);
      delete(merkkijono,1,virhepaikka);
      val(s1, luku, virhepaikka);
      if virhepaikka > 0 then exit;
      end else jatka := false;
      if luku > suurin then suurin := luku;
      if luku < pienin then pienin := luku;
      if merkkijono ='' then jatka := false
      end;
      if virhetilanne
      then writeln('Ei numeroita ainakaan alussa!')
      else writeln ('Suurin luku oli ',suurin , ' ja pienin luku oli ' , pienin );
      Readln;
      end.

      • lefa12mutsi

        Niin paskaa koodia paskalla koodikielellä. Ei ihan sitä mitä on määritelty kuhan nyt jonkinlainen versio eli peruskoodarin normipäivä toimistolla :)
        Onpa kyllä tosi kiva ettei enää tarvi pascalia koodata.


      • muistakkosenään

        Annat ymmärtää että olet aiemmin koodannut Pascalilla niin miten tuon koodaisit sitten Pascalilla?


      • Turbo-Urpo1
        lefa12mutsi kirjoitti:

        Niin paskaa koodia paskalla koodikielellä. Ei ihan sitä mitä on määritelty kuhan nyt jonkinlainen versio eli peruskoodarin normipäivä toimistolla :)
        Onpa kyllä tosi kiva ettei enää tarvi pascalia koodata.

        Koodi on sievästi koottu. tämä sivusto esittää sen huonosti, niin laitoin Lazaruksella kasaan ja kaappasin kuvan, nyt siitä eroittaa rakenteen paljon paremmin. Täysin 10 arvoinen suoritus:
        https://i.postimg.cc/KYG55WHH/Valinta-009.png


      • lefa12mutsi

        No joo ei koodi sinänsä ollut mitenkää paskaa(asiansa varmaankin ajaa) mutta ei siis vastannu vaatimuksia kuten ei usein oikeassakaan työelämässä sitä vain kuittailin :)
        Javalla olisi asiakas varmaan halunnu vastauksen ja ne kohdat vain korjattuna eikä mitään ylimääräisiä tarkastuksia/muutoksia.
        Kysymyshän oli :
        "Mitä koodissa pitää korjata, jotta nollaa ei huomioida vertailussa."

        Ja joo tosiaan olen koodannut pascalilla tosin yli 20 vuotta sitten peruskoulussa ja ei oikein maistunut silloin eikä nyttenkään :)


      • Lazzo1

    • Turbo-Urpo1

      En malttanut olla tuomatta haukuttavaksi pythoniakaan, on se niin vittumaista kun saman tekee niin paljon helpommalla, ettei sitä enään ohjelmaksi kehtaa kutsua
      https://i.postimg.cc/ZqqRRrfX/Valinta-007.png

      • lefa12mutsi

        Tuohan ei tee sitä samaa mitä alkuperäinen ohjelma vaan kaikki luvut pitää antaa kerralla :)


      • Turbo-Urpo1
        lefa12mutsi kirjoitti:

        Tuohan ei tee sitä samaa mitä alkuperäinen ohjelma vaan kaikki luvut pitää antaa kerralla :)

        Eli käyttäjänkin helpompaa korjata virheet syötöstä, aivan oikein.


    • kyllähtee

      Poista nolla tietokoneen valikoimista.

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Päivän Sanna: Nvidia sijoittaa miljardi dollaria Nokian osakkeisiin

      Nvidia merkitsee osakkeet 6,01 Yhdysvaltain dollarin osakekohtaisella merkintähinnalla tavanomaisten toteutumisehtojen t
      Maailman menoa
      64
      5680
    2. Palkansaajilta kupattiin 27,5 mrd euroa työeläkkeisiin

      Jo pelkän himmelin toimintakulut olivat 400 miljoonaa euroa, jolla olisi mukavasti tuottanut myös sote-palveluja hyvinvo
      Maailman menoa
      107
      3575
    3. Suomessa Pohjoismaiden tyhmimmät demarit......aijaijai..

      Lasse Lehtinen sanoo suoraan, että Ruotsissa on fiksummat demarit kuin Suomessa. Ja Tampereella fiksummat demut kuin Hel
      Maailman menoa
      57
      3448
    4. Sanna Marin teki sen, mihin muut eivät pystyneet - sote kerralla maaliin

      Yli 15 vuotta Suomessa vatvottu sote-uudistus meni lopulta läpi Sanna Marinin hallituksen aikana. Edeltävät hallitukset
      Maailman menoa
      5
      2663
    5. Lehtinen: "Oli demareidenkin onni, että valkoiset voittivat sodan 1918"

      Lasse Lehtisen mukaan vasemmalla on radiohiljaisuus hänen uutuuskirjastaan, "Läheltä piti. Kansakunnan hurjat hetket" L
      Maailman menoa
      93
      2662
    6. SDP:n valtuutettu valehtelee koulutuksensa

      SDP:n helsinkiläinen kaupunginvaltuutettu Mahad Ahmed käyttää maisterin titteliä suoritettuaan 60 opintopisteen epäviral
      Maailman menoa
      74
      2530
    7. IL - 100 000 potentiaalista sotilasta pakeni Ukrainasta!

      "Ukrainasta nuorten miesten joukkopako Liki 100 000 asevelvollisuusikäistä miestä on poistunut Ukrainasta parin viime k
      Maailman menoa
      13
      2420
    8. Marinin hallitus hyväksyi soten (105-77) vuonna 2021

      vastaan äänesti Kok, persut, KD, Liike Nyt. Nyt on sitten käynyt niin kuin on käynyt. Pääkirjoitus: Sanna Marin jätti
      Maailman menoa
      42
      2394
    9. Nepotismi jytkyttää porvaristossa

      Taas uutisoidaan, että useampi perussuomalainen kansanedustaja on palkannut oman perheenjäsenensä eduskunta-avustajaksi
      Maailman menoa
      86
      1967
    10. Persut palkkaavat verorahoilla

      avustajikseen lapsiaan ja naisystäviään. Juuso on palkannut avustajakseen oman poikansa. Hänen koulutustaustastaan ei
      Maailman menoa
      340
      1894
    Aihe