2011-01-01 10 views
4

Je suis nouveau à la programmation en général, donc j'essaie d'être aussi précis que possible dans cette question. Il y a ce livre sur lequel je fais des exercices. J'ai réussi à faire plus de la moitié de ce qu'ils disent, mais ce n'est qu'une contribution que j'ai eu du mal à trouver.générer un nombre aléatoire avec des restrictions

Je vais écrire la question et ensuite mon code,

« Ecrire une application qui crée et imprime un numéro de téléphone au hasard de la forme XXX-XXX-XXXX. Inclure les tirets dans la sortie. Ne pas laissez les trois premiers chiffres contenir un 8 ou 9 (mais ne soyez pas plus restrictif que cela), et assurez-vous que le deuxième ensemble de trois chiffres n'est pas plus grand que 742. Indice: Pensez à la manière la plus simple de construire le Numéro de téléphone Chaque chiffre ne doit pas être déterminé séparément "

OK, la phrase en surbrillance est ce que je suis ng à. Voici mon code:

import java.util.Random; 
public class PP33 { 
    public static void main (String[] args) { 
    Random rand = new Random(); 

    int num1, num2, num3; 

    num1 = rand.nextInt (900) + 100; 
    num2 = rand.nextInt (643) + 100; 
    num3 = rand.nextInt (9000) + 1000; 

    System.out.println(num1+"-"+num2+"-"+num3); 
    } 
} 

Comment suis-je supposé faire? Je suis sur le chapitre 3 donc nous n'avons pas encore discuté si les déclarations etcetera, mais les alias, classe de chaîne, paquets, déclaration d'importation, classe aléatoire, classe de maths, sortie de formatage (decimal- & nombreFormat), Printf, énumération & Classes de wrapper + autoboxing . Donc, pensez à répondre à la question basée uniquement sur ces hypothèses, s'il vous plaît.

Le code n'a pas d'erreurs.

Merci!

+1

Comment l'utilisation de trois variables pour les trois premiers chiffres, le choix d'un nombre aléatoire entre 0-7 pour chaque? ;) – coobird

+0

variable1 = rand.nextInt (8) + 100; variable2 = rand.nextInt (8) + 100; variable3 = rand.nextInt (8) + 100; Voulez-vous dire comme ça? Je reçois toujours 8 et 9 cependant. – Racket

+0

@coobird, comment est-ce un commentaire pas une réponse? :) –

Répondre

8

Voyant que cela semble être des devoirs que je me sens comme une explication de ce est en train de se produire devrait être donné.

Vous devez générer trois ensembles de nombres.

Le premier nombre a le plus de besoins. Il doit être supérieur à 100 mais contiennent un 8 ou 9.

de vous assurer qu'il sera toujours supérieur à 100 en utilisant:

(rand.nextInt(7)+1) * 100. 

Cela dit, générer un nombre aléatoire entre 0 et 6. Ajoutez 1 à ce nombre pour vous assurer qu'il ne peut jamais être 0. Donc s'il choisit 0, +1 est ajouté en le faisant 1. S'il prend 6, +1 est ajouté, ce qui en fait 7, etc. Ceci satisfait la règle # 1 et règle # 2.

Vous assurer le premier numéro n'a jamais 8 ou 9.

(rand.nextInt(8) * 10) + rand.nextInt(8) 

Genreate un nombre aléatoire 0-7. Le * 10 s'assure qu'il sera dans la dixième position tandis que le dernier place le numéro dans la dernière position. Au lieu d'essayer de corriger l'autre réponse, car il utilise également DecimalFormat incorrectement.

package stackoverflow_4574713; 

import java.text.DecimalFormat; 
import java.util.Random; 

public class Main { 
     public static void main(String[] args) { 

     Random rand = new Random(); 
     int num1 = (rand.nextInt(7) + 1) * 100 + (rand.nextInt(8) * 10) + rand.nextInt(8); 
     int num2 = rand.nextInt(743); 
     int num3 = rand.nextInt(10000); 

     DecimalFormat df3 = new DecimalFormat("000"); // 3 zeros 
     DecimalFormat df4 = new DecimalFormat("0000"); // 4 zeros 

     String phoneNumber = df3.format(num1) + "-" + df3.format(num2) + "-" + df4.format(num3); 

     System.out.println(phoneNumber); 
    } 
} 

Sortie:

662-492-1168 
1

Hmm, juste une idée très simple de changer cela

num1 = rand.nextInt(8)*100 + rand.nextInt(8)*10 + rand.nextInt(8); 
num2 = rand.nextInt(743); 

Pour une sortie plus facile, vous pouvez utiliser DecimalFormat

DecimalFormat df3 = new DecimalFormat ("000"); // 3 zeros 
DecimalFormat df4 = new DecimalFormat ("0000"); // 4 zeros 
System.out.println(df3.format(num1)+"-"+df3.format(num2)+"-"+df4.format(num3)); 
+0

num1 = rand.nextInt (8) * 100 + rand.nextInt (8) * 10 + rand.nextInt (8); OK, c'était une idée intelligente. Toutefois. Je reçois toujours des nombres inférieurs à 100. Pour un exemple: 43. Je suis censé avoir 100 ans et plus. – Racket

+0

c'est parce que nextInt a choisi 0. Vous devez faire (rand.nextInt (7) +1) * 100 à la place pour vous assurer que c'est toujours 1-7 au lieu de 0-7. Je vais +1 une fois qu'il met à jour son algorithme pour être ce que j'ai dit. num1 = (rand.nextInt (7) +1) * 100 + rand.nextInt (8) * 10 + rand.nextInt (8); Bien sûr, vous n'avez pas mentionné cela, mais un indicatif régional commençant par 1 n'est pas valide aux États-Unis. –

+0

je ne suis pas après 1-7, c'est juste qu'il ne devrait pas être inférieur à 100. – Racket

4

Pour les trois premiers chiffres, vous devez générer chaque chiffre séparément. Voir les variables i1, i2 et i3 ci-dessous.

Pour les trois chiffres, tout nombre entre 0 et 741 devrait fonctionner.

Pour l'ensemble final de quatre chiffres, tout nombre entre 0 et 9999 devrait fonctionner.

L'astuce ici est de savoir comment vous formatez la sortie. Vous pouvez le faire avec un objet NumberFormat, mais j'ai choisi de le faire avec la méthode String.format(). Dans celui-ci, vous spécifiez comment vous voulez que chaque nombre soit formaté. Donc, j'ai utilisé la chaîne de format "%d%d%d-%03d-%04d". Le %d insère un entier formaté en base 10 dans la chaîne. Le %03d fait en sorte qu'il est de trois caractères de large et que tout espace supplémentaire est rembourré à gauche avec un 0. En d'autres termes, 4 est au format "004" et 27 au format "027". Le %04d fonctionne de la même manière, sauf qu'il a quatre caractères de large.

Voici comment vous mettez tout cela ensemble.

 
Random r = new Random(); 

int i1 = r.nextInt(8); // returns random number between 0 and 7 
int i2 = r.nextInt(8); 
int i3 = r.nextInt(8); 
int i4 = r.nextInt(742); // returns random number between 0 and 741 
int i5 = r.nextInt(10000); // returns random number between 0 and 9999 

String phoneNumber = String.format("%d%d%d-%03d-%04d", i1, i2, i3, i4, i5); 
System.out.println(phoneNumber);` 
+0

Cela ne fonctionnera pas comme i1 peut être 0, résultant en un nombre 010. Cela ne satisfait pas l'indicatif régional étant supérieur à 100. –

+3

Ce n'était pas une exigence dans la question initiale: "Ne laissez pas les trois premiers les chiffres contiennent un 8 ou 9 (mais ne sont pas plus restrictifs que cela) " – pwc

+0

Je suis d'accord, il semblait ajouter cette exigence dans un commentaire sur la réponse de quelqu'un d'autre. –

-2
public String GetRandomPhone(){ 
    return String.format("(%03d) %03d-%04d", 
     (int) Math.floor(999*Math.random()), 
     (int) Math.floor(999*Math.random()), 
     (int) Math.floor(9999*Math.random())); 
} 
+1

Votre formatage ne vous convient pas. Vous n'évitez pas 8 ou 9 dans le premier bloc. Vous n'évitez pas les résultats> 742 dans le second bloc. –

0

J'ai eu cette même question que la première affectation de ma classe Java, avec la mise en garde que nous ne pouvions utiliser les méthodes que nous avons appris en classe jusqu'à ce moment-là. Par conséquent, nous ne pouvions pas utiliser la méthode .format. Voici ce que je suis venu avec:

import java.util.Random; 

/** 
* 
* @author 
*/ 
public class Randnum { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 

    Random num = new Random(); 
    int num0, num1, num2, num3, num4, num5, num6, num7; 

    num0 = num.nextInt(7) + 1; 
    num1 = num.nextInt(8); 
    num2 = num.nextInt(8); 
    num3 = num.nextInt(643) + 101; 
    num4 = num.nextInt(10); 
    num5 = num.nextInt(10); 
    num6 = num.nextInt(10); 
    num7 = num.nextInt(10); 

    String randnum= "A random phone number: "; 
    System.out.print (randnum); 
    System.out.print (num0); 
    System.out.print (num1); 
    System.out.print (num2); 
    System.out.print ("-" + num3 + "-"); 
    System.out.print (num4); 
    System.out.print (num5); 
    System.out.print (num6); 
    System.out.println (num7); 

    } 
} 
0

Vous pouvez également vérifier que le préfixe n'est pas 555

+1

Salut, bienvenue à SO. Cela devrait en fait être un commentaire, pas une réponse. Vous pouvez commenter une fois que vous gagnez assez de réputation. À votre santé. – Cthulhu

Questions connexes