Blnpwr
Blnpwr

Reputation: 1875

Starting a method more times

I am facing some problems in Eclipse using Java. My code generates license plate numbers for cars in Germany, such as B-AC 7687 B is for Berlin, so as you can see, 3 chars and 4 integer numbers, both together is a String ( you will see this in my code). It generates one license randomly. I used math.random for this. If the user inputs "2" it means, one wants 2 licence plate numbers that are different not same! So here is the problem, it always generates the same license plate number although I used random principle. If the user inputs 2 there should be 2 different licences, for this, I have to start the generate method 2 times, or even more (depends on the input of the user). How can I start user-input depended methods? Here is my code:

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();
}

}

Upvotes: 1

Views: 54

Answers (2)

Hellzzar
Hellzzar

Reputation: 195

The indexes you are using for generating the plate are assigned once (The time you instace your class) so they are the same for all calls to plate-generating methods. Instead initializing those variables in the first place, try locating them within the methods generierekennzeichen() and generierenummern() as follows:

        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();
    }

Upvotes: 1

Tyler Hoyles
Tyler Hoyles

Reputation: 36

It looks like you are initializing the numbers nummer1, nummer2 ... when you create the class. Therefore they don't change each time you call the method. if you just used nummern[(int) (Math.random() * 9 + 1)] instead of the nummern[nummer1], nummern[nummer2] then eeach number should be different.

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 + ""); 

Then you should also do the same thing with the letters.

Upvotes: 2

Related Questions