2015-04-09 3 views
2

Я выполняю задание для школы, которое требует, чтобы программа получала личную информацию пользователей различными способами (фамилия, имя, адрес и т. Д.) И выводила их по основному методу ,Printf не работает должным образом в Java 1.7

ПРОБЛЕМА: инструкция 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:[email protected] 
Phone: 123-456-7890 

Что может быть проблема? Я хочу, чтобы остальная часть информации совпала с именем.

+1

Вы можете проделать простой маршрут и просто использовать «\ t» в конце «Имя ...», «Адрес ...». Это запустит все сохраненные строки в одном индексе табуляции. – Mastergeek

+0

[Синтаксис строки форматирования Java] (http://sharkysoft.com/archive/printf/docs/javadocs/lava/clib/stdio/doc-files/specification.htm) - особенно проверьте спецификаторы ширины 1.3. полезно – rosshamish

ответ

2

Так что, когда вы говорите «% 15s», вы говорите, чтобы поле было 15 символов в ширину, если нужно, с пробелами. Это работает для имени - есть куча пробелов, а затем имя.

Адрес, однако, составляет более 14 символов, поэтому перед ним нет пробелов. (Обратите внимание, что он не усекает на 14; 14 - это просто минимальная ширина здесь.)

Вы не определили, что вы подразумеваете под «line up», хотя ... вы хотите «1234» непосредственно под «John «? В этом случае вам нужно будет добавить эти пробелы в строку printf и пропустить спецификаторы ширины (замените их на «% s» вместо «% 15s»).

Если вместо этого вам нужен почтовый индекс «12345» под «Смит», вам необходимо значительно увеличить спецификаторы ширины. Спецификатор ширины плюс префикс («Имя:» или «Адрес:») должен содержать один и тот же номер. Например, используйте «% 50s» для имени и используйте «% 47s» для адреса (так как в «Адресе» есть еще три символа, чем в «Name:»).

+0

Это именно то, что я искал. Очень признателен. – PitchMod

0

Попробуйте объединить первое и последнее имя вместе в одну переменную (fullName), а затем использовать эту новую переменную, а не использовать две отдельные строки.

+0

Если бы это было до меня, я бы сделал это. Мой профессор хочет, чтобы я использовал отдельные переменные для последнего и первого имени. – PitchMod

+1

Ваш метод 'displayName()' не может начинаться с 'String fullname = firstName +" "+ lastName;', а затем 'printf()' с 'fullname'? – dcsohl

+0

Точно так же, как @dcsohl сказал выше, вы можете сохранить их как отдельные переменные, однако я действительно не верю, что вы можете передать две переменные в параметры printf. Есть, скорее всего, другие решения, однако я подчеркиваю, что это один из самых прямых. – AboutTime

Смежные вопросы