我是一般的编程新手,所以我试图在这个问题上尽可能具体。 这本书我正在做一些练习。我设法做了他们所说的一半以上,但这只是我一直在努力寻找的一个输入。
我会写问题,然后是我的代码,
“编写一个创建并打印表格XXX-XXX-XXXX的随机电话号码的应用程序。在输出中包含破折号。不要让前三位数字包含8或9 (但不要比这更严格),并确保第二组三位数不大于742. 提示:通过最简单的方式构建电话号码。每个数字都不必单独确定。“
好的,突出显示的句子就是我正在看的内容。 这是我的代码:
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);
}
}
我怎么想这样做?我在第3章,所以我们还没有讨论if语句等,但别名,String类,包,导入声明,随机类,数学类,格式输出(decimal-& numberFormat),Printf,Enumeration&包装类+自动装箱。因此,请考虑仅根据这些假设回答问题。
代码没有任何错误。
谢谢!
答案 0 :(得分:8)
看来这似乎是作业,我觉得应该给出正在发生的事情的解释。
您需要生成三组数字。
第一个数字的要求最高。它必须大于100但不包含8或9。
使用以下方法确保它始终大于100
(rand.nextInt(7)+1) * 100.
这就是说,生成一个介于0和6之间的随机数。为该数字添加1,以确保它永远不会为0.所以如果它选择0,则添加+1使其成为1.如果它选择6,+ 1添加使其成为7等。这满足规则#1和规则#2。
您确保第一个号码永远不会有8或9。
(rand.nextInt(8) * 10) + rand.nextInt(8)
从0-7创建一个随机数。 * 10确保它位于第十位,而最后一位将数字放在最后位置。
而不是尝试修复其他答案,因为它也错误地使用了DecimalFormat。
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);
}
}
输出:
662-492-1168
答案 1 :(得分:4)
对于前三位数字,您需要分别生成每个数字。请参阅下面的变量i1,i2和i3。
对于三位数,0到741之间的任何数字都应该有效。
对于最后一组四位数,0到9999之间的任何数字都应该有效。
这里的技巧是如何格式化输出。您可以使用NumberFormat
对象执行此操作,但我选择使用String.format()
方法执行此操作。在其中,您可以指定希望如何格式化每个数字。所以,我使用了格式字符串"%d%d%d-%03d-%04d"
。 %d
将基数为10的格式整数插入到字符串中。 %03d
确保它是三个字符宽,并且任何额外的空格都用0
填充左边。换句话说,4
格式为"004"
,27
格式为"027"
。 %04d
的工作方式类似,但宽度为四个字符。
以下是你如何把它们放在一起。
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);`
答案 2 :(得分:1)
嗯,只是一个非常简单的想法,将其改为
num1 = rand.nextInt(8)*100 + rand.nextInt(8)*10 + rand.nextInt(8);
num2 = rand.nextInt(743);
为了便于输出,您可以使用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));
答案 3 :(得分:0)
我有同样的问题作为我的Java类的第一个任务,但需要注意的是我们只能使用我们在课堂上学到的方法。因此,我们无法使用.format方法。以下是我提出的建议:
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);
}
}
答案 4 :(得分:0)
您可能还想检查前缀不是555
答案 5 :(得分:0)
var num1 = Math.floor(Math.random()*7) + 1;
var num2 = Math.floor(Math.random()*8);
var num3 = Math.floor(Math.random()*8);
var part2 = Math.floor(Math.random()*742);
if(part2 < 100){
part2 = "0" + part2;
}else if (part2 < 10) {
part2= "00" + part2;
}else{
part2 = part2;
}
var part3 = Math.floor(Math.random()*10000);
if(part3 < 1000){
part3 = "0" + part3;
}else if (part3 < 100) {
part3 = "00"+ part3;
}else if(part3 < 10){
part3 = "000" + part3;
}else{
part3 = part3;
}
document.getElementById("demo").innerHTML= " " + num1 + num2 + num3 + "-" + part2 + "-" + part3;
答案 6 :(得分:-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()));
}