générer de nombres aléatoires avec des restrictions
Je suis nouveau en programmation en général, donc j'essaie d'être aussi précis que possible dans cette question.
Il y a ce livre que je suis en train de faire des exercices. J'ai réussi à faire plus de la moitié de ce qu'ils disent, mais c'est juste une entrée que j'ai eu du mal à trouver.
Je vais écrire la question et par la suite mon code,
"Écrire une application qui crée et imprime de façon aléatoire un numéro de téléphone de la forme XXX-XXX-XXXX. Inclure les tirets dans la sortie. Ne laissez pas les trois premiers chiffres contiennent un 8 ou un 9 (mais ne pas être plus restrictives que cela), et assurez-vous que la deuxième série de trois chiffres, ce n'est pas supérieure à 742. Conseil: Réfléchir à la meilleure façon de construire le numéro de téléphone. Chaque chiffre ne doit pas être déterminé séparément."
OK en surbrillance phrase est ce que je suis en train de regarder.
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 de sorte que nous n'avons pas encore examiné si les déclarations, etc., mais les Alias, classe String, Ensembles, déclaration d'Importation, au Hasard de Classe, la Classe de Mathématiques, le Formatage de sortie (décimal- & numberFormat), Printf, l'Énumération & classes Wrapper + l'autoboxing. D'envisager de répondre à la question en se basant uniquement sur ces hypothèses, s'il vous plaît.
Le code n'a pas toutes les erreurs.
Merci!
variable1 = rand.nextInt(8) + 100; variable2 = rand.nextInt(8) + 100; variable3 = rand.nextInt(8) + 100; entendez-vous comme cela? Je suis encore en train 8 & 9.
comment est-ce qu'un commentaire n'est pas une réponse? 🙂
S'il vous plaît ajouter l'exigence supplémentaire "Pour un exemple: 43. Je suis censé obtenir 100 et plus" à votre post d'origine.
OriginalL'auteur Racket | 2011-01-01
Vous devez vous connecter pour publier un commentaire.
En le voyant comme cela semble être les devoirs je me sens comme une explication de ce qui se passe doit être donné.
Vous disposez de trois ensembles de nombres, vous devez générer.
Le premier numéro a la plupart des besoins. Il doit être supérieur à 100, mais pas contenir de 8 ou 9.
Vous assurer qu'il sera toujours plus grand que 100, en utilisant:
Cela dit, générer un nombre aléatoire entre 0 et 6. Ajouter 1 à ce nombre pour s'assurer qu'il ne peut jamais être égal à 0. Donc, si elle prend 0, +1 est ajoutée 1. Si elle choisit 6, +1 est ajouté rendant 7, etc. Cela répond à la règle #1 et #2.
De vous assurer que le premier numéro n'a jamais un 8 ou 9.
Genreate un nombre aléatoire de 0 à 7. L' *10 fait en sorte qu'il sera à la dixième position, tandis que le dernier, on place le nombre de la dernière position.
Au lieu d'essayer de corriger l'autre réponse, car il utilise également DecimalFormat de manière incorrecte.
De sortie:
OriginalL'auteur Andrew T Finnell
Pour les trois premiers chiffres, vous avez besoin de générer chaque chiffre séparément. Voir les variables i1, i2, et i3 ci-dessous.
Pour les trois chiffres, n'importe quel nombre entre 0 et 741 devrait fonctionner.
Pour la dernière série de quatre chiffres, n'importe quel nombre entre 0 et 9999 devrait fonctionner.
L'astuce ici est de savoir comment vous le format de sortie. Vous pourriez le faire avec un
NumberFormat
objet, mais j'ai choisi de le faire avec laString.format()
méthode. En elle, vous indiquez comment vous souhaitez que chaque nombre à mettre en forme. Donc, j'ai utilisé la chaîne de format"%d%d%d-%03d-%04d"
. Le%d
insère en base 10 formaté entier dans la chaîne. Le%03d
permet de s'assurer qu'il est de trois caractères, et que tout l'espace supplémentaire est de gauche-collier avec un0
. En d'autres termes,4
est formaté comme"004"
et27
est formaté comme"027"
. Le%04d
fonctionne de la même façon, sauf qu'elle est de quatre caractères de large.Voici comment mettre tout cela ensemble.
Ce n'était pas une exigence dans la question d'origine: "Ne laissez pas les trois premiers chiffres contiennent un 8 ou 9 (mais ne pas être plus restrictive que celle)"
Je suis d'accord, il semblait ajouter à cette exigence dans un commentaire sur quelqu'un d'autre répondre.
Convenu que ce n'était pas précisé dans la question. Il est facile d'accueillir, cependant: il suffit de faire le premier chiffre de 1 à 7.
int i1 = r.nextInt(7) + 1;
OriginalL'auteur pwc
Hmm, vraiment une idée simple de la changer pour
Pour faciliter la sortie, vous pouvez utiliser DecimalFormat
c'est parce que nextInt choisi 0. Ce que vous devez faire (rand.nextInt(7)+1) * 100 au lieu de s'assurer qu'il est toujours de 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 le mentionner, mais un code de zone, en commençant par 1 n'est pas valide aux états-unis.
je ne suis pas après 1 à 7, c'est juste qu'il ne devrait pas être de moins de 100.
vous êtes au bout de 1 à 7 comme premier chiffre. Lire mon commentaire mis à jour. À l'aide de num1 = (rand.nextInt(7)+1)*100 + rand.nextInt(8)*10 + rand.nextInt(8); sera en mesure de satisfaire les exigences de la zone de code. Elles ne contiennent pas un 8 ou un 9 et de ne jamais être en dessous de 100.
Fixe DecimalFormat dans mon exemple pour que personne ne se confondre.
OriginalL'auteur RapidCoder
J'ai eu la même question que la première affectation pour ma classe Java, avec la mise en garde que nous ne pouvions utiliser les méthodes que nous avons appris dans la classe jusqu'à ce point. Par conséquent, nous ne pouvions pas utiliser le .méthode de mise en forme. Voici ce que j'ai trouvé:
OriginalL'auteur TheSchnitz
Vous pourriez également vouloir vérifier que le préfixe n'est pas 555
OriginalL'auteur Paul Cogswell
OriginalL'auteur Ion Niciu