多次启动方法

时间:2016-03-26 20:07:18

标签: java methods

我在Eclipse中使用Java遇到了一些问题。我的代码生成德国汽车的车牌号码,例如B-AC 7687 B用于柏林,所以你可以看到,3个字符和4个整数,两者一起是一个字符串(你会在我的代码中看到这个)。它随机生成一个许可证。我使用了math.random。如果用户输入“2”意味着,则需要2个不同的车牌号码不相同!所以这就是问题所在,虽然我使用了随机原理,它总是生成相同的车牌号码。如果用户输入2应该有2个不同的许可证,为此,我必须启动生成方法2次,甚至更多(取决于用户的输入)。如何启动用户输入依赖方法?这是我的代码:

import java.util.*;

public class Kennzeichen {

char[] alphabet = new char[26];
char[] nummern = new char[10];

String teilstring;
String teilnummern1, teilnummern2, teilnummern3, teilnummern4, teilnummern;
String finale;
int zahl = (int) ((Math.random()) * 25 + 1);
int zahl1 = (int) ((Math.random()) * 25 + 1);
int nummer1 = (int) (Math.random() * 9 + 1);
int nummer2 = (int) (Math.random() * 9 + 1);
int nummer3 = (int) (Math.random() * 9 + 1);
int nummer4 = (int) (Math.random() * 9 + 1);
char a = 65; //ascii
char b = 48; // asci
int zahler = 0;
Scanner s = new Scanner(System.in);
int eineZahl = s.nextInt();

public void arrayalphabet() { // generates an array alphabet A-Z

    for (int i = 0; i < alphabet.length; i++, a++) {
        alphabet[i] = a;
    }

}

public void arraynummern() { //generates numbers between 0 and 9
    for (int i = 0; i < nummern.length; i++, b++) {
        nummern[i] = b;
    }
}

public String generierekennzeichen() { // first char must be B       therefore alphabet[1]

    return(teilstring = alphabet[1] + "" + alphabet[zahl] + "" + alphabet[zahl1]);

}

public String generierenummern() { // 4 numbers are generated and returned as total
    teilnummern1 = nummern[nummer1] + "";
    teilnummern2 = nummern[nummer2] + "";
    teilnummern3 = nummern[nummer3] + "";
    teilnummern4 = nummern[nummer4] + "";
    return(teilnummern = teilnummern1 + teilnummern2 + teilnummern3 + teilnummern4 + "");

}

public void print() { //prints the total license such as B-AD 7645
    System.out.println(finale = teilstring + "-" + teilnummern);
}

public void erzeugestack() { //using stack, not that important(just practise
    Stack<String> s = new Stack<String>();
    s.push(finale);

}

public void Abfrage() { // eineZahl is the input of the user, e.g 2
    for(int i=0; i<eineZahl;i++){
        generierekennzeichen();
        generierenummern();
        print();
    }
}

public static void main(String[] args) {
    Kennzeichen kennzeichen = new Kennzeichen();
    kennzeichen.arrayalphabet();
    // kennzeichen.generierekennzeichen();
    kennzeichen.arraynummern();
    // kennzeichen.generierenummern();
    kennzeichen.Abfrage();
    kennzeichen.erzeugestack();
}

}

2 个答案:

答案 0 :(得分:2)

在创建类时,您似乎正在初始化数字nummer1,nummer2 ....因此,每次调用该方法时,它们都不会发生变化。如果你刚刚使用过 nummern[(int) (Math.random() * 9 + 1)] 而不是nummern[nummer1]nummern[nummer2],那么eeach数应该是不同的。

public String generierenummern() { // 4 numbers are generated and returned as total
teilnummern1 = nummern[(int) (Math.random() * 9 + 1)] + "";
teilnummern2 = nummern[(int) (Math.random() * 9 + 1)] + "";
teilnummern3 = nummern[(int) (Math.random() * 9 + 1)] + "";
teilnummern4 = nummern[(int) (Math.random() * 9 + 1)] + "";
return(teilnummern = teilnummern1 + teilnummern2 + teilnummern3 + teilnummern4 + ""); 

然后你也应该用字母做同样的事情。

答案 1 :(得分:1)

您用于生成平板的索引将被分配一次(您设置类的时间),因此对于所有对平板生成方法的调用它们都是相同的。而是首先初始化这些变量,尝试将它们定位在方法generierekennzeichen()generierenummern()中,如下所示:

        import java.util.*;

        public class Kennzeichen {

        char[] alphabet = new char[26];
        char[] nummern = new char[10];

        String teilstring;
        String teilnummern1, teilnummern2, teilnummern3, teilnummern4, teilnummern;
        String finale;

        char a = 65; //ascii
        char b = 48; // asci
        int zahler = 0;
        Scanner s = new Scanner(System.in);
        int eineZahl = s.nextInt();

        public void arrayalphabet() { // generates an array alphabet A-Z
            for (int i = 0; i < alphabet.length; i++, a++) {
                alphabet[i] = a;
            }
        }

        public void arraynummern() { //generates numbers between 0 and 9
            for (int i = 0; i < nummern.length; i++, b++) {
                nummern[i] = b;
            }
        }

        public String generierekennzeichen() { // first char must be B          therefore     alphabet[1]
           int zahl = (int) ((Math.random()) * 25 + 1);
           int zahl1 = (int) ((Math.random()) * 25 + 1);
           return(teilstring = alphabet[1] + "" + alphabet[zahl] + "" + alphabet[zahl1]);

    }

    public String generierenummern() { // 4 numbers are generated and returned as total

        int nummer1 = (int) (Math.random() * 9 + 1);
        int nummer2 = (int) (Math.random() * 9 + 1);
        int nummer3 = (int) (Math.random() * 9 + 1);
        int nummer4 = (int) (Math.random() * 9 + 1);
        teilnummern1 = nummern[nummer1] + "";
        teilnummern2 = nummern[nummer2] + "";
        teilnummern3 = nummern[nummer3] + "";
        teilnummern4 = nummern[nummer4] + "";
        return(teilnummern = teilnummern1 + teilnummern2 + teilnummern3 + teilnummern4 + "");

    }

    public void print() { //prints the total license such as B-AD 7645
        System.out.println(finale = teilstring + "-" + teilnummern);
    }

    public void erzeugestack() { //using stack, not that important(just practise
        Stack<String> s = new Stack<String>();
        s.push(finale);

    }

    public void Abfrage() { // eineZahl is the input of the user, e.g 2
        for(int i=0; i<eineZahl;i++){
            generierekennzeichen();
            generierenummern();
            print();
        }
    }

    public static void main(String[] args) {
        Kennzeichen kennzeichen = new Kennzeichen();
        kennzeichen.arrayalphabet();
        // kennzeichen.generierekennzeichen();
        kennzeichen.arraynummern();
        // kennzeichen.generierenummern();
        kennzeichen.Abfrage();
        kennzeichen.erzeugestack();
    }