2012-03-07 1 views
0

У меня есть программа java, где я собираю записи от пользователя. Пользователю будет предложено ввести имя, номер телефона и адрес электронной почты. Когда я набираю полное имя (то есть: Майк Смит), программа сохраняет только первое имя. Когда он отправляет адрес электронной почты и номер телефона в текстовый документ, они меняются местами, поэтому адрес электронной почты находится в разделе номера телефона, а номер телефона находится в разделе адреса электронной почты.проверка и отправка ввода в текст doc

Вот часть моей основной получать информацию от пользователя

   String name = Validator.getEntry(ip, "Enter name: "); 
       String email = Validator.getEntry(ip, "Enter email address"); 
       String phone = Validator.getEntry(ip, "Enter phone number: "); 
       AddressBookEntry newEntry = new AddressBookEntry(name, email, phone); 
       AddressBookIO.saveEntry(newEntry); 

Вот раздел моего класса валидатора проверки записи

public static String getEntry(Scanner ip, String prompt) 
{ 

    System.out.println(prompt); 
    String e = ip.next(); 
    ip.nextLine(); 
    return e; 
} 

Я попытался устранить это, устраняя валидатор и просто печатать

system.out.println("Enter name:"); 
    name = ip.next(); 

и т. д. для e почты и телефона, но я получил те же результаты, что и его запуск через класс проверки. Я смущен тем, что нужно проверить дальше. Что-то не так с тем, что я сделал?

Вот мой AddressBookEntry CLAS

 public class AddressBookEntry 
    { 
private String name; 
private String emailAddress; 
private String phoneNumber; 

public AddressBookEntry() 
{ 
    name = ""; 
    emailAddress = ""; 
    phoneNumber = ""; 
} 

public void setName(String name) 
{ 
    this.name = name; 
} 

public String getName() 
{ 
    return name; 
} 

public void setEmailAddress(String emailAddress) 
{ 
    this.emailAddress = emailAddress; 
} 

public String getEmailAddress() 
{ 
    return emailAddress; 
} 

public void setPhoneNumber(String phoneNumber) 
{ 
    this.phoneNumber = phoneNumber; 
} 

public String getPhoneNumber() 
{ 
    return phoneNumber; 
} 

public AddressBookEntry(String newname, String newphone, String newemail) 
{ 
    name = newname; 
    emailAddress = newemail; 
    phoneNumber = newphone; 
} 
    } 

Вот мой IO класс

import java.io.*; 

    public class AddressBookIO 
    { 
private static File addressBookFile = new File("address_book.txt"); 
private static final String FIELD_SEP = "\t"; 
private static final int COL_WIDTH = 20; 

// use this method to return a string that displays 
// all entries in the address_book.txt file 
public static String getEntriesString() 
{ 
    BufferedReader in = null; 
    try 
    { 
     checkFile(); 

     in = new BufferedReader(
      new FileReader(addressBookFile)); 

     // define the string and set a header 
     String entriesString = ""; 
     entriesString = padWithSpaces("Name", COL_WIDTH) 
      + padWithSpaces("Email", COL_WIDTH) 
      + padWithSpaces("Phone", COL_WIDTH) 
      + "\n"; 

     entriesString += padWithSpaces("------------------", COL_WIDTH) 
      + padWithSpaces("------------------", COL_WIDTH) 
      + padWithSpaces("------------------", COL_WIDTH) 
      + "\n"; 

     // append each line in the file to the entriesString 
     String line = in.readLine(); 
     while(line != null) 
     { 
      String[] columns = line.split(FIELD_SEP); 
      String name = columns[0]; 
      String emailAddress = columns[1]; 
      String phoneNumber = columns[2]; 

      entriesString += 
       padWithSpaces(name, COL_WIDTH) + 
       padWithSpaces(emailAddress, COL_WIDTH) + 
       padWithSpaces(phoneNumber, COL_WIDTH) + 
       "\n"; 

      line = in.readLine(); 
     } 
     return entriesString; 
    } 
    catch(IOException ioe) 
    { 
     ioe.printStackTrace(); 
     return null; 
    } 
    finally 
    { 
     close(in); 
    } 
} 

// use this method to append an address book entry 
// to the end of the address_book.txt file 
public static boolean saveEntry(AddressBookEntry entry) 
{ 
    PrintWriter out = null; 
    try 
    { 
     checkFile(); 

     // open output stream for appending 
     out = new PrintWriter(
       new BufferedWriter(
       new FileWriter(addressBookFile, true))); 

     // write all entry to the end of the file 
     out.print(entry.getName() + FIELD_SEP); 
     out.print(entry.getEmailAddress() + FIELD_SEP); 
     out.print(entry.getPhoneNumber() + FIELD_SEP); 
     out.println(); 
    } 
    catch(IOException ioe) 
    { 
     ioe.printStackTrace(); 
     return false; 
    } 
    finally 
    { 
     close(out); 
    } 
    return true; 
} 

// a private method that creates a blank file if the file doesn't already exist 
private static void checkFile() throws IOException 
{ 
    // if the file doesn't exist, create it 
    if (!addressBookFile.exists()) 
     addressBookFile.createNewFile(); 
} 

// a private method that closes the I/O stream 
private static void close(Closeable stream) 
{ 
    try 
    { 
     if (stream != null) 
      stream.close(); 
    } 
    catch(IOException ioe) 
    { 
     ioe.printStackTrace(); 
    } 
} 

// a private method that is used to set the width of a column 
private static String padWithSpaces(String s, int length) 
{ 
    if (s.length() < length) 
    { 
     StringBuilder sb = new StringBuilder(s); 
     while(sb.length() < length) 
     { 
      sb.append(" "); 
     } 
     return sb.toString(); 
    } 
    else 
    { 
     return s.substring(0, length); 
    } 
} 

}

+0

Мы не можем сказать, почему ваш адрес электронной почты или номер телефона меняются местами, не видя, что делают ваши классы AddressBookEntry/IO. – bvulaj

+0

Я отправлю их. –

ответ

2

Scanner.next() прочтет одно слово в то время, поэтому он только чтение имя. Используйте Scanner.nextLine(), если вы хотите всю строку.

System.out.println(prompt); 
String e = ip.nextLine(); 
return e;