我如何连接int值而不添加它们? (JAVA)

时间:2014-03-19 20:13:37

标签: java string coding-style concatenation

新编码,我正在运行一些基本练习来习惯这门语言。 在本练习中,我尝试生成具有以下限制的电话号码:

  1. 前3位数字不能包含8或9
  2. 第2组3位数不能高于742
  3. 我已经看到了添加空字符串的建议(我有),但我不明白为什么会这样。现在,即使我不完全理解为什么会这样,我也会坚持以下几点。

    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类,但它肯定有用。谢谢大家。

7 个答案:

答案 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进行字符串连接。