2016-03-26 44 views
1

Java kullanarak Eclipse'de bazı sorunlarla karşılaşıyorum. Kodum, Almanya'daki otomobiller için B-AC 7687 B'nin Berlin için plaka numarası üretiyor. Gördüğünüz gibi, 3 karakter ve 4 tamsayı numarası, her ikisi de bir String'dir (bunu kodumda göreceksiniz). Rastgele bir lisans üretir. Bunun için math.random kullandım. Eğer kullanıcı "2" girerse, biri farklı olmayan 2 plaka numarası ister! Bu yüzden problem, her zaman rastgele prensip kullanmamı rağmen aynı plaka numarasını üretiyor. Eğer kullanıcı 2 girdiyse 2 farklı lisans olmalıdır, bunun için 2 kez üretme yöntemini veya daha fazla (kullanıcının girişine bağlı olarak) başlamalıyım. Kullanıcı girişine bağlı yöntemleri nasıl başlatabilirim? İşte benim kodudur:Yöntemi daha fazla kez çalıştırma

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

}

sayıların nummer1 başlatılıyor, nummer2 ettiğiniz gibi sınıf oluşturmak zaman ... görünüyor

cevap

2

. Bu nedenle, yöntemi her aradığınızda değişmezler. nummern[nummer1], nummern[nummer2] yerine nummern[(int) (Math.random() * 9 + 1)] kullandıysanız, e-posta numarası farklı olmalıdır.

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

Ardından aynı şeyi harflerle de yapmalısınız.

+0

Vay, çalıştı. Çok teşekkür ederim. Sorun seviliyor. Seni seviyorum – Blnpwr

1

Plakayı oluşturmak için kullandığınız indeksler, bir defaya mahsus olarak (sınıfınızı oluşturduğunuz saat) atanır, bu nedenle plaka oluşturma yöntemlerine yapılan tüm çağrılar için aynıdır. Bunun yerine ilk etapta bu değişkenleri başlatılıyor, aşağıdaki gibi yöntemlerle generierekennzeichen() ve generierenummern() içinde bunları bulmayı:

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