Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Java: Toiseksi suurin luku

JRokka [10.11.2019 13:37:26]

#

Tämä ohjelma etsii toiseksi suurimman luvun. Ensin etsitään taulukon suurin luku ja sitä kautta toiseksi suurin vähentämällä luvusta aina yksi.

Koodi

import java.util.Scanner;

public class Toiseksi_suurin_luku {
    public static void main(String[] args){
        Scanner syote = new Scanner(System.in);
        int luvut = 0;
        int suurinLuku = 0;
        int toiseksiSuurin = 0;
        boolean onkoLoydetty = false;
        //Syötetään lähtötiedot.
        System.out.println("Syötä lukujen määrä.");
        luvut = syote.nextInt();
        int[] luku = new int[luvut];
        for (int x = 0; x < luvut; x++){
            luku[x] = syote.nextInt();
        }
        //Etsitään suurin luku.
        //Oletetaan aluksi, että ensimmäinen luku on suurinLuku.
        //Jos löytyy suurempi luku, se tallennetaan muuttujaan.
        suurinLuku = luku[0];
        for (int x = 1; x < luvut; x++){
            if (luku[x] > suurinLuku){
                //Suurempi luku löydetty.
                suurinLuku = luku[x];
            }
        }
        //Etsitään toiseksi suurin luku.
        //Pienennetään lukua aina yhdellä, kunnes toiseksi suurin luku on löydetty.
        toiseksiSuurin = suurinLuku;
        while (onkoLoydetty == false && toiseksiSuurin > 0){
           toiseksiSuurin -= 1;
           //Katsotaan, onko luku toiseksi suurin.
           for (int x = 0; x < luvut; x++){
               if (luku[x] == toiseksiSuurin){
                   //Toiseksi suurin luku löydetty.
                   onkoLoydetty = true;
               }
           }
        }
        //Näytetään tulos.
        System.out.println("Toiseksi suurin:" + toiseksiSuurin);
    }
}

Metabolix [10.11.2019 17:49:55]

#

Tuo on taas aivan äärettömän hidas ratkaisu. Jos taulukossa on kaksi lukua, joista isompi on miljardi, silmukkaa ajetaan jopa miljardi kertaa, jotta löytyy se pienempi.

Oikea ratkaisu olisi pitää alunperinkin muistissa sekä suurin että toiseksi suurin luku. Jos uusi luku on suurin, vanhasta suurimmasta tulee toiseksi suurin.

Vastaus

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

Tietoa sivustosta