Salasanan arvontaongelma

mikael

Hei. Täytyisi saada toimivaksi ohjelma, joka kysyy käyttäjältä, montako merkkiä tämä haluaa salasanaansa. Tämän jälkeen ohjelma arpoo satunnaisesti valmiiksi luoduista taulukoista kyseisen määrän merkkejä ja tulostaa ne salasanana. Saan kyllä ohjelman arpomaan yhden luvun, mutten osaa laittaa sitä silleen, et arpois sen määrän jonka käyttäjä antaa. Osaisko joku neuvoa minua?

5

416

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • masa

      Käytä for lausetta ja ota aina seuraava luku nextInt() metodilla jos käytät random luokkaa.

      • samaa ongelmaa

        Kiitos, mietinkin että tuo tehdään for-lauseen avulla. uutta metodia en hoksannut ajatellakaan.

        Voitko antaa palautetta, mikä tässä tökkii? en ole vielä tuonne lisännyt sitä uutta metodia ja for-lausetta mutta haluaisin varmistaa, onko tämä kyhäelmä muuten oikein.

        import javax.swing.*;
        import java.util.*;
        public class Oppimisteht2
        {
           public static void main(String args[])
           {
           String rivi = "";
           String satunnainen = "";
           String merkkimaara= "";

        // kysytään käyttäjältä kuinka monta merkkiä hän haluaa salasanaan

           merkkimaara = JOptionPane.showInputDialog("Anna haluamasi merkkimäärä");

        // käytettävissä olevat merkit
           String merkit[] = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
                       "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
                       "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G",
                       "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
                       "S", "T", "U", "V", "W", "X", "Y", "Z", "1", "2", "3",
                       "4", "5", "6", "7", "8", "9", "0" };

           Random rand = new Random();

        // määritellään taulukoiden koot
           int eka = rand.nextInt(15) 1;
           int toka = rand.nextInt(15) 1;

        // luodaan taulukko
           String taulu[][] = new String[eka][toka];

        // lisätään taulukkoon merkkejä toisesta taulukosta satunnaisesti
           for (int i=0; i


      • masa
        samaa ongelmaa kirjoitti:

        Kiitos, mietinkin että tuo tehdään for-lauseen avulla. uutta metodia en hoksannut ajatellakaan.

        Voitko antaa palautetta, mikä tässä tökkii? en ole vielä tuonne lisännyt sitä uutta metodia ja for-lausetta mutta haluaisin varmistaa, onko tämä kyhäelmä muuten oikein.

        import javax.swing.*;
        import java.util.*;
        public class Oppimisteht2
        {
           public static void main(String args[])
           {
           String rivi = "";
           String satunnainen = "";
           String merkkimaara= "";

        // kysytään käyttäjältä kuinka monta merkkiä hän haluaa salasanaan

           merkkimaara = JOptionPane.showInputDialog("Anna haluamasi merkkimäärä");

        // käytettävissä olevat merkit
           String merkit[] = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
                       "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
                       "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G",
                       "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
                       "S", "T", "U", "V", "W", "X", "Y", "Z", "1", "2", "3",
                       "4", "5", "6", "7", "8", "9", "0" };

           Random rand = new Random();

        // määritellään taulukoiden koot
           int eka = rand.nextInt(15) 1;
           int toka = rand.nextInt(15) 1;

        // luodaan taulukko
           String taulu[][] = new String[eka][toka];

        // lisätään taulukkoon merkkejä toisesta taulukosta satunnaisesti
           for (int i=0; i

        import javax.swing.*;
        import java.util.*;
        import java.lang.Object;
        public class Oppimisteht2{

        public static void main(String args[]){
        int merkkimaara = 0;
        String satunnainen = "";
        String input = "";
        char taulukko[];

        // kysytään käyttäjältä kuinka monta merkkiä hän haluaa salasanaan

        input = JOptionPane.showInputDialog("Anna haluamasi merkkimäärä");
        for(int i = 0; i < input.length() ; i ){
        merkkimaara = Character.getNumericValue(input.charAt(i))*Math.pow(10,input.length()-i-1);
        }
        // Luodaan samankokoinen taulukko.
        taulukko = new char[merkkimaara];

        // käytettävissä olevat merkit
        char merkit[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
        'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
        'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
        'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
        'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3',
        '4', '5', '6', '7', '8', '9', '0' };

        //Jos ei haluta joka kerta samoja lukuja niin siemen luvun tulisi vaihdella
        //eri ajokerroilla. Otetaan siemeneksi tietokoneen kellonaika millisekunteina.
        Random rand = new Random(System.currentTimeMillis());

        /**Seuraavaksi ei tarvitse muuta tehdä kuin lukea "satunnaisesti" merkkejä
        *taulukosta salasanaan. Otetaan satunnaisluvusta jakojäännös merkkitaulukon
        *pituudelle, jolloin saadaan indeksi josta merkki otetaan.
        */

        for(int i = 0; i < merkkimaara; i ){
        taulukko[i] = merkit[Math.abs(rand.nextInt()%merkit.length)];
        }

        //Seuraavaksi luodaan String olio taulukkon merkeistä.
        satunnainen = new String(taulukko);

        // näytetään arvotut merkit
        JOptionPane.showMessageDialog(null,"Salasanasi on: " satunnainen);

        System.exit(0);

        }
        }

        Muutin melko lailla tuota ohjelmaasi, siinä oli mielestäni paljonkin liikaa, en itse asiassa ymmärtänyt mitä teit tuolla satunnaisen kokoisella kaksiulotteisella taulukolla. Toinen huomioitava seikka on muuttujien tyypit, merkkejä on helpompi käsitellä charreina ja kokonaislukuja integereinä.

        Jatkossa olisi suotavaa tehdä käyttöliittymä ja itse ohjelma erikseen sopivasti metodeihin jaoteltuna, tämä ei siis ole hyvää tyyliä vaikka pieni ohjelma onkin.


      • Teukka
        masa kirjoitti:

        import javax.swing.*;
        import java.util.*;
        import java.lang.Object;
        public class Oppimisteht2{

        public static void main(String args[]){
        int merkkimaara = 0;
        String satunnainen = "";
        String input = "";
        char taulukko[];

        // kysytään käyttäjältä kuinka monta merkkiä hän haluaa salasanaan

        input = JOptionPane.showInputDialog("Anna haluamasi merkkimäärä");
        for(int i = 0; i < input.length() ; i ){
        merkkimaara = Character.getNumericValue(input.charAt(i))*Math.pow(10,input.length()-i-1);
        }
        // Luodaan samankokoinen taulukko.
        taulukko = new char[merkkimaara];

        // käytettävissä olevat merkit
        char merkit[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
        'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
        'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
        'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
        'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3',
        '4', '5', '6', '7', '8', '9', '0' };

        //Jos ei haluta joka kerta samoja lukuja niin siemen luvun tulisi vaihdella
        //eri ajokerroilla. Otetaan siemeneksi tietokoneen kellonaika millisekunteina.
        Random rand = new Random(System.currentTimeMillis());

        /**Seuraavaksi ei tarvitse muuta tehdä kuin lukea "satunnaisesti" merkkejä
        *taulukosta salasanaan. Otetaan satunnaisluvusta jakojäännös merkkitaulukon
        *pituudelle, jolloin saadaan indeksi josta merkki otetaan.
        */

        for(int i = 0; i < merkkimaara; i ){
        taulukko[i] = merkit[Math.abs(rand.nextInt()%merkit.length)];
        }

        //Seuraavaksi luodaan String olio taulukkon merkeistä.
        satunnainen = new String(taulukko);

        // näytetään arvotut merkit
        JOptionPane.showMessageDialog(null,"Salasanasi on: " satunnainen);

        System.exit(0);

        }
        }

        Muutin melko lailla tuota ohjelmaasi, siinä oli mielestäni paljonkin liikaa, en itse asiassa ymmärtänyt mitä teit tuolla satunnaisen kokoisella kaksiulotteisella taulukolla. Toinen huomioitava seikka on muuttujien tyypit, merkkejä on helpompi käsitellä charreina ja kokonaislukuja integereinä.

        Jatkossa olisi suotavaa tehdä käyttöliittymä ja itse ohjelma erikseen sopivasti metodeihin jaoteltuna, tämä ei siis ole hyvää tyyliä vaikka pieni ohjelma onkin.

        No oli aika pieni "ohjelma" ts. jonkun datanomi-opiskelijan toinen harjoitustehtävä. Teit sitten sen hänen puolestaan.


      • mikael
        Teukka kirjoitti:

        No oli aika pieni "ohjelma" ts. jonkun datanomi-opiskelijan toinen harjoitustehtävä. Teit sitten sen hänen puolestaan.

        Ongelmat ne on datanomillakin.


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

    Luetuimmat keskustelut

    1. Stefu LOISTAVAA!

      Ilmeisesti joku vedonlyönti tms, selvinpäin-elämästä👍👍👍 ilmankos ei ole Sofiaa näkynyt. Miten tän parin nyt käy, kun viimi ei maksettuna enää virta
      Kotimaiset julkkisjuorut
      134
      2024
    2. Msisa on eronnut

      Mies ei kestänyt jatkuvia syrjähyppyjä eikä totuutta Turun yöstä.
      Kotimaiset julkkisjuorut
      29
      1082
    3. Missä sinuun mies voisi

      näin pääsiäisenä vahingossa törmätä? Ei ilmeisesti missään?
      Ikävä
      69
      883
    4. Venäläisiä keksintöjä?

      Kun tässä nyt yritän miettiä venäläisiä keksintöjä, niin ei äkkiseltään tule oikein yhtään mieleen. Onko niitä edes?
      Maailman menoa
      262
      770
    5. Tiedän että on aika luovuttaa

      En vaan osaa. Liian kauan toivonut jotain, mikä ei koskaan tule toteutumaan. Olo ei ole mitenkään hyvä, mutta itken vähemmän kuin silloin kun sinuun r
      Ikävä
      65
      760
    6. Raviskalla tappo?

      Huhuja liikkuu et raviskalla ois joku laitettu kylymäksi?
      Oulainen
      14
      744
    7. Sun mies on mun

      Sinun mies on yksin minun ja sinä et voi sille mitään.
      Ikävä
      83
      693
    8. Katumuksesta

      Pitkäperjantaina eräässä seurueessa puhuttiin katumisesta ja mitä itse kukin katuu. Yleisintä tuntui olevan pahasti sanominen jollekin läheiselle ja t
      Sinkut
      132
      687
    9. Sisällissota kiihtyy Ruotsissa

      KaupunkiTaistelut koraanin puolesta kiihtyneet Linköpingissä ja Malmössä. Ruotsin poliisi joutunut vetäytymään suojiin. Päätän raporttini Ruotsista.
      Maailman menoa
      213
      679
    10. Et arvaa nainen, miten ikävä mulla on sinua.

      Sinua ei voi unohtaa. Pusu sulle musulle!
      Ikävä
      26
      673
    Aihe