001 /*
002 * RandomLastDigit.java
003 *
004 * Created on 8. Januar 2004, 23:19
005 */
006
007 package randomLD;
008
009 /**
010 *
011 * @author Florian Hiemeyer
012 * @version 1.00
013 */
014 /**
015 * Die Klasse kalkuliert zufällige Band und Seitennummern, aus denen
016 * eine (ebenfalls zufällige) Telefonnummer herausgesucht werden soll.
017 * Die tatsächlich mit Telefonnummern besetzten Zahlen werden im Konstanten
018 * Array ANZ_SEITEN gesetzt!
019 * Zusätzlich werden noch zwei "random last digits" bestimmt, die statt der
020 * letzten zwei Ziffern der zufällig gewählten Telefonnummer gewählt werden.
021 * (als 2. Telefonnummer, zusätzlich zur eigentlichen Telefonbuchnummer)
022 **/
023 public class RandomLastDigit {
024 /**
025 * Verfahren: 1. Zahl: Beginn des Telefonbuchteils von Band1,
026 * 2. Zahl: Ende des Telefonbuchteils von Band1,
027 * 3. Zahl: Beginn des Telefonbuchteils von Band2,
028 * 4. Zahl: etc.
029 */
030 private static final int [] ANZ_SEITEN = new int [] {50 , 51,
031 1000 , 1001};
032
033 /**
034 * Anzahl der Nummern, die gezogen werden soll!
035 */
036 private static final int ANZ_NUMMERN = 1000;
037
038 /** Anzahl der Baende */
039 int numBaende = (int)Math.round(ANZ_SEITEN.length/(double)2);
040
041 /** Gewählter Band */
042 private int band[] = new int[ANZ_NUMMERN];
043 /** Gewählte Seite */
044 private int seite[] = new int[ANZ_NUMMERN];
045 /** random last digits */
046 private int rld2[] = new int[ANZ_NUMMERN];
047
048
049 /** Creates a new instance of RandomLastDigit */
050 public RandomLastDigit() {
051 run();
052 }
053
054 public final void run() {
055 for (int i = 0;i<ANZ_NUMMERN;i++)
056 calcNewTelNum(i);
057 }
058
059 /** Berechnet neue Werte für das Objekt */
060 public final void calcNewTelNum(int j) {
061 if(ANZ_SEITEN.length%2 != 0)
062 System.out.println("FEHLER! Telefonbandangaben fehlerhaft!");
063
064 //eff. Seiten Zahl der Einzelnen Baende;
065 int seiten[] = new int [numBaende];
066
067 // Berechnung der Gesamtzahl der Seiten und der effektiven
068 // Seitenzahl pro Band
069 int gesamtSeiten = 0;
070 for ( int i = 0, temp=0; i<numBaende;i++) {
071 temp = ANZ_SEITEN[2*i+1]-ANZ_SEITEN[2*i]+1;
072 seiten[i] = temp;
073 gesamtSeiten += temp;
074 }
075
076 // Bestimme Seite (aus Gesamtseiten)
077 int tempSeite = (int)Math.round(Math.random()*gesamtSeiten );
078
079 // Bestimme zugehörigen Band und seite = nr. im gewählten Band
080 for(int i = 0,seitenBisher = 0, seitenBisherAlt = 0;i<numBaende;i++) {
081 seitenBisher += seiten[i];
082 if (tempSeite <= seitenBisher) {
083 band[j] = i+1;
084 seite[j] = ANZ_SEITEN[2*i]+ tempSeite - seitenBisherAlt;
085 break;
086 }
087 seitenBisherAlt = seitenBisher;
088 }
089
090 /**
091
092 // Berechnung des Telefonbuchbandes
093 band = (int)(Math.floor(Math.random()*numBaende))+1;
094
095 // effektive Anzahl von Seiten (die mit Telefonnummern bedruckt sind)
096 int effSeiten = ANZ_SEITEN[2*band-1]-ANZ_SEITEN[2*(band-1)]+1;
097
098 // Berechnung der Seite
099 seite = ANZ_SEITEN[2*(band-1)]+((int)Math.floor(Math.random()*effSeiten));
100 */
101
102 // Random Last Digits (2 Stück)
103 rld2[j] = (int)(Math.random()*100);
104 }
105
106 /** Die Methode liefert den Status des Objekts */
107 public String toString() {
108 StringBuffer temp = new StringBuffer("band,seite,rld2\n");
109
110 // Speichere Ergebnisse in temp
111 // Wenn rld2 < 10: Dann 0x ausgeben (x= rld2)
112 String rldString = new String();
113 for(int i=0;i<ANZ_NUMMERN;i++) {
114 if (rld2[i]<10)
115 rldString = new String("0"+rld2[i]);
116 else
117 rldString = Integer.toString(rld2[i]);
118 temp.append(new String(band[i] + "," + seite[i] + "," + rldString+"\n"));
119 }
120 return new String(temp);
121 }
122
123 public static void main (String[] args) {
124 // Objekt initialisieren
125 RandomLastDigit rld = new RandomLastDigit();
126 // Den Status des Objekts "rld" ausgeben!
127 System.out.println(rld);
128 }
129 }