新编码,我正在运行一些基本练习来习惯这门语言。 在本练习中,我尝试生成具有以下限制的电话号码:
我已经看到了添加空字符串的建议(我有),但我不明白为什么会这样。现在,即使我不完全理解为什么会这样,我也会坚持以下几点。
num1 = rand.nextInt(7) + 1;
num2 = rand.nextInt(7) + 1;
num3 = rand.nextInt(7) + 1;
num4 = rand.nextInt(643) + 100;
num5 = rand.nextInt(1001) + 1000;
String number = "" + num1 + num2 + num3 + "-" + num4 + "-" + num5;
System.out.print("Your assigned phone number is: " + number);
编辑:新代码包括sb.append
StringBuilder sb = new StringBuilder();
int num1, num2, num3, num4, num5;
num1 = rand.nextInt(7) + 1;
num2 = rand.nextInt(7) + 1;
num3 = rand.nextInt(7) + 1;
num4 = rand.nextInt(643) + 100;
num5 = rand.nextInt(1001) + 1000;
sb.append(num1);
sb.append(num2);
sb.append(num3);
sb.append("-");
sb.append(num4);
sb.append("-");
sb.append(num5);
//String number = "" + num1 + num2 + num3 + "-" + num4 + "-" + num5;
System.out.print("Your assigned phone number is: " + sb.toString());
@Serge的回答对我有用。虽然它似乎需要更多编码与我必须包括的所有sb.append调用。我还没有学过StringBuilder类,但它肯定有用。谢谢大家。
答案 0 :(得分:3)
使用stringbuilder
StringBuilder sb = new StringBuilder();
sb.append(num1);
sb.append(num2);
sb.append(num3);
sb.append("-");
sb.append(num4);
sb.append("-");
sb.append(num5);
System.out.println("Your phone number is: " + sb.toString());
答案 1 :(得分:3)
这是解释:
num1 = rand.nextInt(7) + 1; //This generates a random number between 1 and 7 (because rand.nextInt(n); returns a random number between 0 and n, then first number in a phone number can't be zero, that's why +1 is added.
num4 = rand.nextInt(643) + 100; // This one generates a random number between 1 and 643 and add 100 (because it can be 0 - 99 but that don't give us a number of 3 digits), so we add 100 and it will give us a number of 3 digits.
num5 = rand.nextInt(1001) + 1000; // returns a random number of 4 digits between 1000 and 1001, so basicaly: 1000 or 1001.
String number = "" + num1 + num2 + num3 + "-" + num4 + "-" + num5; //this will be the example:
number = "367-783-1001";
System.out.println("Your assigned phone number is: " + number);
Your assigned phone number is: 367-783-1001
它连接它们因为我们将它们添加到String(文本变量)而不是int(数字变量)
他们添加数字的方式是正确的
是的,如果你在开头添加“”,编译器将从int解析为String(我不知道为什么),但你可以将它改为:
String number = String.valueOf(num1) + String.valueOf(num2) + String.valueOf(num3) + "-" + String.valueOf(num4) + "-" + String.valueOf(num5);
或者:
String number = Integer.toString(num1) + Integer.toString(num2) + Integer.toString(num3) + "-" + Integer.toString(num4) + "-" + Integer.toString(num5);
答案 2 :(得分:1)
+运算符对字符串和数字的行为有所不同。在String上调用时,它会连接。在数字类型上调用时,它会添加。通过从""
开始,您告诉编译器将数字连接到字符串,而字符串又将数字转换为字符串。所有进一步的连接都会重复此过程。
答案 3 :(得分:1)
问题是您实际上是在添加num1,num2和num3等。您需要将其转换为字符串以进行连接。一个简单的方法就是这样做。
String no1 = Integer.toString(num1);
String no2 = Integer.toString(num2);
//DO THAT FOR EVERY numX and then your code will work
另一种方法是String builder
StringBuilder sb = new StringBuilder();
sb.append("");
sb.append(num1);
sb.append(num2);
sb.append(num3);
sb.append("-");
sb.append(num4);
sb.append(num5);
sb.append(num6);
sb.append(num7);
String phoneNumber = sb.toString();
System.out.println("PHONE NUMBER" + phoneNumber);
答案 4 :(得分:1)
int mon = calendar.get(Calendar.MONTH);
int year = calendar.get(Calendar.YEAR);
int date = calendar.get(Calendar.DATE);
int day = calendar.get(Calendar.HOUR_OF_DAY);
int min = calendar.get(Calendar.MINUTE);
int i = 0;
if(mon<= 9)
mon =""+i+mon ;
String dates;
if(date <= 9)
dates = ""+'0'+date;
int sec = calendar.get(Calendar.SECOND);
String Time1 = date+"-"+mon+"-"+year+" "+day+":"+min+":"+sec;
min=min+5;
String Time2 = date+"-"+mon+"-"+year+" "+day+":"+min+":"+sec;
Time1=Time1+"_"+Time2;
``System.out.println(date+"-"+mon+"-"+year+" "+day+":"+min+":"+sec);
return Time1;
}
mon =""+i+mon ; is not being accepted shwing error chnage type of mon to String...Why???
答案 5 :(得分:0)
在您的解决方案中,int
首先更改为数字的字符串表示形式,然后将它们连接到空String
。这不是一个好习惯,因为String
是不可变的。
另一种实现此目的的方法是使用字符串构建器将String
表示形式的整数值附加到其缓冲区中,并使用StringBuilder.append(int)
方法。然后,您可以使用StringBuilder.toString()
获得生成的字符串。
答案 6 :(得分:0)
在这里,您要在String的开头添加空白引号,以提及您要执行字符串操作。
“+”运算符在此处的工作方式不同。
如果你的字符串连接在开始操作时找到2个数字,它将使用num2添加num1。
例如,
int num1 = 2;
int num2 = 3;
String s = num1 +num2; //This will result in 5
String s2 = ""+ num1 + num2; //This will result in 23
这就是你需要填空的原因。
字符串是不可变的,因此最好使用StringBuilder进行字符串连接。