使用Random随机获取Null

时间:2017-09-01 12:20:44

标签: java null

它的Java Starter在这里,所以我编写了我的程序,它创建了一个密码,我使用随机对象有一个随机数字,将选择什么信来或什么数字来。

我不断获得数字和符号......我得到的是这样的东西:

" 9 = 9null = 99"我不明白为什么会有空。 Java没有向我显示我的代码有任何问题(不会显示空指针异常。)

这是我的代码:

    package project.Secureword.com;
import java.awt.*;



import java.awt.event.*;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
import java.util.Random;
import javax.swing.*;



public class Main {

    private static JFrame start;
    private static TextField field;
    private static String password;
    private static String lastpass;
    public static Settings passsettings;

    public static Random r;
    public static void main(String[] args) {
        passsettings = new Settings();
        passsettings.setIfDots(true);
        passsettings.setIfLowercase(true);
        passsettings.setIfNum(true);
        passsettings.setIfUpprcase(true);
        Settings.changerun();
        start();
    }

    public static void start() {
        Font a = new Font(null, Font.BOLD, 0);
        Font size = a.deriveFont(20f);
        JButton createPass = new JButton();
        createPass.setText("<html> Click me to <br> Generate a Password! <html>");
        createPass.setPreferredSize(new Dimension(100,100));
        JLabel text = new JLabel();
        text.setText("<html> Welcome to SECUREPASS! <br> An Extreme Strong Password Generator <br> Developed by OfficialCode");
        text.setPreferredSize(new Dimension(150,150));
        text.setFont(size);




        field = new TextField(20);
        field.setSize(new Dimension(50,50));





        start = new JFrame("Secureword | Strong password Generator | Coded by OfficialCode");
        start.setPreferredSize(new Dimension(390,390));
        start.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        start.setLocationRelativeTo(null);
        start.setLayout(new BorderLayout());
        start.getContentPane().add(createPass, BorderLayout.WEST);
        start.getContentPane().add(text, BorderLayout.PAGE_START);
        start.getContentPane().add(field, BorderLayout.CENTER);
        start.pack();
        start.setVisible(true);
        password = "";


        createPass.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                field.setText(null);
                field.selectAll();
                allrandom();

            }});



}
    public static void allrandom() {
        String[] pass = new String[8];
        Random r = new Random();
    for(int i = 0 ; i < pass.length ; i++) {
        int ch = 0;
        ch = r.nextInt(3);
        switch(ch) {
        case 1:
            if(passsettings.isIfDots()) {
                String newchar = ""; 
                newchar = dotpass();
                pass[i] = newchar;
                break;
            }
        case 2:
            if(passsettings.isIfNum()) {
                String newchar2 = ""; 
                newchar2 = Numpass();
                pass[i] = newchar2;
                break;
            }
        case 3:
            String newchar3 = ""; 
            newchar3 = charchose();
            pass[i] = newchar3;
            break;
        }

    }
    for(int i = 0 ; i < pass.length ; i++) {
        String newpasschar = "";
        newpasschar = pass[i];
        password = password + newpasschar;
    }
    field.setText(password);

        // random() end
    }

    public static String uppercasepass() {
        Random r = new Random();
        String passletter = "";
        int rN3 = 0;
        rN3 = r.nextInt(26);
        switch(rN3) {
        case 1:
            passletter = "A";
        case 2:
            passletter = "B";
        case 3:
            passletter = "C";
        case 4:
            passletter = "D";
        case 5:
            passletter = "E";
        case 6:
            passletter = "F";
        case 7:
            passletter = "G";
        case 8:
            passletter = "H";
        case 9:
            passletter = "I";
        case 10:
            passletter = "J";
        case 11:
            passletter = "K";
        case 12:
            passletter = "L";
        case 13:
            passletter = "M";
        case 14:
            passletter = "N";
        case 15:
            passletter = "O";
        case 16:
            passletter = "P";
        case 17:
            passletter = "Q";
        case 18:
            passletter = "R";
        case 19:
            passletter = "S";
        case 20:
            passletter = "T";
        case 21:
            passletter = "U";
        case 22:
            passletter = "V";
        case 23:
            passletter = "W";
        case 24:
            passletter = "X";
        case 25:
            passletter = "Y";
        case 26:
            passletter = "Z";


    }

        return passletter;
    // uppercase() end
}

    public static String lowercasepass() {
        Random r = new Random();
        String passletter = "";
        int rN3 = 0;
        rN3 = r.nextInt(26);
        switch(rN3) {
        case 1:
            passletter = "a";
        case 2:
            passletter = "b";
        case 3:
            passletter = "c";
        case 4:
            passletter = "d";
        case 5:
            passletter = "e";
        case 6:
            passletter = "f";
        case 7:
            passletter = "g";
        case 8:
            passletter = "h";
        case 9:
            passletter = "i";
        case 10:
            passletter = "j";
        case 11:
            passletter = "k";
        case 12:
            passletter = "l";
        case 13:
            passletter = "m";
        case 14:
            passletter = "n";
        case 15:
            passletter = "o";
        case 16:
            passletter = "p";
        case 17:
            passletter = "q";
        case 18:
            passletter = "r";
        case 19:
            passletter = "s";
        case 20:
            passletter = "t";
        case 21:
            passletter = "u";
        case 22:
            passletter = "v";
        case 23:
            passletter = "w";
        case 24:
            passletter = "x";
        case 25:
            passletter = "y";
        case 26:
            passletter = "z";


    }

        return passletter;
    }

    public static String Numpass() {
        Random r = new Random();
        String passletter = "";
        int rN = 0;
        rN = r.nextInt(9);
        switch(rN) {
        case 1:
            passletter = "1";
        case 2:
            passletter = "2";
        case 3:
            passletter = "3";
        case 4:
            passletter = "4";
        case 5:
            passletter = "5";
        case 6:
            passletter = "6";
        case 7:
            passletter = "7";
        case 8:
            passletter = "8";
        case 9:
            passletter = "9";
        }
        return passletter;
    }

    public static String dotpass() {
        Random r = new Random();
        String passletter = "";
        int rN5 = 0;
        rN5 = r.nextInt(5);
        switch(rN5) {
        case 1:
            passletter = "_";
        case 2:
            passletter = "]";
        case 3:
            passletter = "$";
        case 4:
            passletter = "#";
        case 5:
            passletter = "=";


        }




        return passletter;
    }


    public static String charchose() {
        Random r = new Random();
        String line = "";
        int rN = 0;
        rN = r.nextInt(20);
        switch(rN) {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
        case 6:
        case 7:
        case 8:
        case 9:
        case 10:
            if(passsettings.isIfLowercase()) {
                line = lowercasepass();
            }
        case 11:
        case 12:
        case 13:
        case 14:
        case 15:
        case 16:
        case 17:
        case 18:
        case 19:
        case 20:
            if(passsettings.isIfUpprcase()) {
                line = uppercasepass();
            }

        }






        return line;
    }





}

1 个答案:

答案 0 :(得分:0)

问题来自于Random.nextInt(n)返回介于0-n(不包括)之间的值的事实。你的开关盒都是错误的。

这解释了您的空,因为您没有对ch = 0执行任何操作,String停留在null

switch(ch){
case 1: ... //symbol
case 2 ... //number
case 3: ... //letter
}

这应该是

switch(ch){
case 0: ... //symbol
case 1: ... //number
case 2: ... //letter
}

其他一些问题或改进:

  • break之后你没有case所以你总是得到最后一个案例(以下所有情况)。导致4个字符zZ9=(易于暴力!)
  • 的可能性
  • 您应该使用char[]代替String[],不需要像String那样使用String s = "a"; 存储一个字符。

而不是

char c = 'a';

你可以

'a' + r.nextInt(26)

如果你阅读下一个点,减少代码的长度。

  • 您可以通过执行'a'之类的添加来减少切换,以获得'z'char[]之间的值
  • 对于随机符号而不是开关,为每个字符创建一个 final static char[] symbol = {'#', '@', '-', '\\', '/', '*'}; static getRadomSymbol(){ Random r = new Random(); return symbol[r.nextInt(symbol.length)]; } 的静态数组,然后使用此数组的大小获取一个随机值。

喜欢:

{{1}}

允许轻松添加字符(并再次减少行数;))