2016-03-26 9 views
1

Ich habe einige Probleme in Eclipse mit Java. Mein Code erzeugt Kennzeichen für Autos in Deutschland, wie B-AC 7687 B ist für Berlin, so wie Sie sehen können, 3 Zeichen und 4 ganze Zahlen, beide zusammen ist ein String (Sie sehen dies in meinem Code). Es generiert eine Lizenz nach dem Zufallsprinzip. Ich habe math.random dafür benutzt. Wenn der Benutzer "2" eingibt, will man 2 Nummernschildnummern, die nicht gleich sind! Also hier ist das Problem, es erzeugt immer das gleiche Nummernschild, obwohl ich das Zufallsprinzip verwendet habe. Wenn der Benutzer 2 eingibt, sollte es zwei verschiedene Lizenzen geben, dazu muss ich die Generate-Methode 2-mal oder noch mehr starten (abhängig von der Eingabe des Benutzers). Wie kann ich vom Benutzer abhängige Methoden starten? Hier ist mein Code:Starten einer Methode mehrmals

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

}

Antwort

2

Es sieht aus wie Sie die Zahlen nummer1 initialisiert wird, Nummer2 ... wenn Sie die Klasse erstellen. Daher ändern sie sich nicht jedes Mal, wenn Sie die Methode aufrufen. wenn Sie gerade nummern[(int) (Math.random() * 9 + 1)] anstelle der nummern[nummer1], nummern[nummer2] verwendet haben, dann sollte eeach Nummer anders sein.

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

Dann sollten Sie auch das gleiche mit den Buchstaben tun.

+0

Wow, das funktioniert. Vielen Dank. Das Problem ist geliebt. Lieb dich – Blnpwr

1

Die Indizes, die Sie zum Erzeugen der Platte verwenden, werden einmal zugewiesen (Die Zeit, die Sie in Ihre Klasse investieren), damit sie für alle Aufrufe von Platten erzeugenden Methoden gleich sind. Statt diese Variablen in erster Linie zu initialisieren, versuchen, sie innerhalb der Methoden generierekennzeichen() und generierenummern() Ortung wie folgt:

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