java不断更改第一个邮政编码

时间:2011-02-26 22:38:31

标签: java

我不明白为什么当我编译这段代码时,我得到了错误的邮政编码。

John Smith
486 test St.
Yahoo, MA 898 - 2597JohnSmith
486 test St.
Yahoo, MA 898  2597

代码

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

      String firstName = "John";
      String lastName = "Smith";
      int streetNumber = 486;
      String streetName = "test St.";
      String city = "Yahoo";
      String state = "MA";
      int zip =  01602;
      int zipplus4 = 2597;


     System.out.print(firstName + " " + lastName + "\n" + streetNumber + " " + streetName + "\n" + city + ", " + state + " " + zip + " - " + zipplus4);

     System.out.println(firstName + lastName);
     System.out.println(streetNumber + " " + streetName);  
     System.out.println(city + ", " + state + " " + zip + " - " + zipplus4);  

    }

    }

6 个答案:

答案 0 :(得分:5)

当您指定一个前导零的数字时,它将被视为八进制(基数为8,而不是十进制基数为10或十六进制数为16)。

01602 octal == 898 decimal

由于Java并未考虑使用Zip代码,为了获得所需效果,请删除前导零,并在打印时对其进行格式化:

System.out.println(city + ", " + state + " " + new java.text.NumberFormat("00000").format(zip) + " - " + new java.text.NumberFormat("0000").format(zipplus4));  

答案 1 :(得分:3)

使那些邮政编码为String而不是int,它会没问题。

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

        String firstName = "John";
        String lastName = "Smith";
        int streetNumber = 486;
        String streetName = "test St.";
        String city = "Yahoo";
        String state = "MA";
        String zip = "01602";
        String zipplus4 = "2597";


        System.out.print(firstName + " " + lastName + "\n" + streetNumber + " " + streetName + "\n" + city + ", " + state + " " + zip + " - " + zipplus4);

        System.out.println(firstName + lastName);
        System.out.println(streetNumber + " " + streetName);
        System.out.println(city + ", " + state + " " + zip + " - " + zipplus4);

    }
}

结果:

John Smith
486 test St.
Yahoo, MA 01602 - 2597JohnSmith
486 test St.
Yahoo, MA 01602 - 2597

Process finished with exit code 0

我还建议你将它们封装成合理的物体。为什么在使用Address类时处理String原语? Java的面向对象;更好地考虑对象。

答案 2 :(得分:2)

01602 - 开头的这个0表示您使用的是八进制数而不是十进制数。删除它,你会没事的: - )。

BTW IntelliJ IDEA甚至会在此处显示警告。

答案 3 :(得分:0)

您应该使用String类型的zip和zipplus4。

如果您无法更改类型,则可以在println语句中使用以下内容

String.format("%05d", zip)

答案 4 :(得分:0)

取下前导零〜或使其成为一个字符串

答案 5 :(得分:0)

Zipcode不应该存储在数值数据类型中,因为它实际上不是你想要进行数学运算的东西,而是将它存储为字符串,它会正常工作。