Printf在Java 1.7中无法正常运行

时间:2015-04-09 18:13:52

标签: java formatting format printf

我正在为学校做作业,要求程序通过各种方法(姓氏,名字,地址等)获取用户的个人信息,并通过主要方法输出。

问题:printf语句在显示名称时工作正常,但是当它显示其余用户信息时,它不会正确格式化。

import java.util.Scanner;

public class PersonalInfo {

public static String lastName, firstName, address, email, phone;
public static Scanner kb = new Scanner(System.in);

public static void main(String[] args)
{   
    getLastName();
    getFirstName();
    getAddress();
    getEmail();
    getPhone();

    displayName();
    displayAddress();
    displayEmailPhone();
}


//--------GET methods--------
public static void getLastName()
{
    System.out.print("What is the last name of the user? ");
    lastName = kb.nextLine();
}

public static void getFirstName()
{   
    System.out.print("Now enter the first name:  ");
    firstName = kb.nextLine();
}

public static void getAddress()
{       
    System.out.print("Now enter the address: ");
    address = kb.nextLine();
}

public static void getEmail()
{   
    System.out.print("Now enter the email: ");
    email = kb.nextLine();
}

public static void getPhone()
{       
    System.out.print("Lastly, enter the phone number in the format xxx-xxx-
    xxxx: ");
    phone = kb.nextLine();
}

//--------DISPLAY methods--------
public static void displayName()
{       
    System.out.printf("\nName:%15s %s", firstName, lastName);
}

public static void displayAddress()
{       
    System.out.printf("\nAddress:%12s", address);
}

public static void displayEmailPhone()
{   
    System.out.printf("\nEmail:%14s", email);
    System.out.printf("\nPhone:%14s", phone);
}
}

输出结果:

Name:           John Smith
Address:1234 street, city, state 12345
Email:useremail@email.com
Phone:  123-456-7890

可能是什么问题?我希望其余信息与名称对齐。

2 个答案:

答案 0 :(得分:2)

因此,当你说“%15s”时,你要说的是将字段设为15个字符宽,如果需要则添加空格。这适用于名称 - 有一堆空格,然后是名称。

但是,地址远远超过14个字符,因此前面没有空格。 (请注意,它不会在14处截断; 14这里只是最小宽度。)

你没有通过“排队”来定义你的意思......你想在“John”下直接使用“1234”吗?在这种情况下,您需要做的是将这些空格添加到printf字符串,并跳过宽度说明符(将其更改为“%s”而不是“%15s”)。

如果您想要“Smith”下的邮政编码“12345”,那么您需要大幅增加宽度说明符。宽度说明符加上前缀(“名称:”或“地址:”)将需要加起来相同的数字。例如,使用“%50s”作为名称,并使用“%47s”作为地址(因为“地址:”中的字符数比“名称:”中的字符多三个。)

答案 1 :(得分:0)

尝试将名字和姓氏组合成一个单一变量(fullName),然后使用该新变量,而不是使用两个单独的字符串。