我正在为学校做作业,要求程序通过各种方法(姓氏,名字,地址等)获取用户的个人信息,并通过主要方法输出。
问题: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
可能是什么问题?我希望其余信息与名称对齐。
答案 0 :(得分:2)
因此,当你说“%15s”时,你要说的是将字段设为15个字符宽,如果需要则添加空格。这适用于名称 - 有一堆空格,然后是名称。
但是,地址远远超过14个字符,因此前面没有空格。 (请注意,它不会在14处截断; 14这里只是最小宽度。)
你没有通过“排队”来定义你的意思......你想在“John”下直接使用“1234”吗?在这种情况下,您需要做的是将这些空格添加到printf字符串,并跳过宽度说明符(将其更改为“%s”而不是“%15s”)。
如果您想要“Smith”下的邮政编码“12345”,那么您需要大幅增加宽度说明符。宽度说明符加上前缀(“名称:”或“地址:”)将需要加起来相同的数字。例如,使用“%50s”作为名称,并使用“%47s”作为地址(因为“地址:”中的字符数比“名称:”中的字符多三个。)
答案 1 :(得分:0)
尝试将名字和姓氏组合成一个单一变量(fullName),然后使用该新变量,而不是使用两个单独的字符串。