2013-12-08 4 views
1

Я пытаюсь распечатать результаты ввода данных пользователя в простой текстовый файл, но все, что я пробовал, оказалось неудачным. Я попытался использовать PrintWriter в случае коммутатора, но результаты все еще просто распечатали нуль. Я довольно новичок в Java, поэтому, возможно, мне не хватает очевидного? Вот код:Печать строковых массивов в текстовый файл с использованием java

package parkingsystem; 

import java.io.*; 
import java.util.Scanner; 

public class Registration { 

    static String [][] userData; 
    static String [][] fileData; 

    public static void Registration(){ 

     Scanner input = new Scanner(System.in); 
     String lotNo; 
     String First; 
     String Last; 
     String studentID; 
     String phoneNo; 
     String email; 
     String carNo; 
     String dateReg; 
     String strcontent; 
     String proceed; 
     boolean proceed2 = true; 
     userData = new String [50][6]; 
     fileData = new String [50][6]; 
     int counter = 0; 
     int col; 
     int row; 
     boolean carry_on = true; 
     MainMenu choices = new MainMenu(); 

     while(proceed2=true){ 
     System.out.println("Press Y/y to add a new user"); 
     System.out.println("Press N/n to return to menu"); 
     proceed = input.nextLine(); 
      switch (proceed) { 
       case "Y": 
       case "y": 
        System.out.println("Enter your student ID"); 
        studentID = input.nextLine(); 
        System.out.println("Enter your first name"); 
        First = input.nextLine(); 
        System.out.println("Enter your last name"); 
        Last = input.nextLine(); 
        System.out.println("Enter your car number"); 
        carNo = input.nextLine(); 
        System.out.println("Enter your contact number"); 
        phoneNo = input.nextLine(); 
        System.out.println("Enter your email address"); 
        email = input.nextLine(); 
        row = counter ; 
        userData [row][0] = studentID; 
        userData [row][1] = First; 
        userData [row][2] = Last; 
        userData [row][3] = carNo; 
        userData [row][4] = phoneNo; 
        userData [row][5] = email; 
        if (counter == 6){ 
         carry_on=false; 
        } 

        proceed2 = false; 
        break; 
       case "N": 
       case "n": 
        choices.Menus(); 
        break; 
      } 

     } 



} 

} 
+3

Всякий раз, когда вы пишете 'if (boolean = true)' программист Java умирает ... Это операция присваивания, и ** всегда ** возвращает 'true'. Вам нужно 'if (boolean == true)' или, по сути, 'if (boolean)'. –

+1

Это оскорбительная линия, на которую указывает Борис: while (continue2 = true). Вы должны переписать его во время (continue2). Ознакомьтесь с [Учебник по Java] (http://docs.oracle.com/javase/tutorial/essential/io/), если вам нужна помощь в записи в файл. – MarsAtomic

+0

Помимо того, что сказал борис, какая ошибка вы получаете? –

ответ

1

Вот второго прохода на повторном факторинг кода.

Итак, теперь в этом рефакторинге мы фиксируем и храним вновь созданные объекты CarOwner и сохраняем их в списке.

Затем мы видим, как пройти через этот Список CarOwner, а затем записать эти объекты в файл с именем carOwners.dat

Обычно, в промышленности, код рефакторинг делается в контексте наличия набора единичные тесты, с помощью которых вы можете убедиться, что рефакторинг не нарушил требуемое поведение кода, но мы просто учимся здесь, поэтому эта работа служит для объяснения некоторых понятий, которые вам не хватает, и в этой первой последующей итерации ниже приведены некоторые проблемы его собственный, поэтому не принимайте это как конечный продукт.

Рефакторинг

  1. Я создал класс CarOwner.
  2. Я переименовал булевскую переменную canProceed так, чтобы она читалась более естественно.
  3. Обновление: Я сделал класс CarOwner Serializable; это позволит нам записать объект в файл.
  4. Обновление: я добавил код, который добавляет новые CarOwners, и добавляет его в список, а затем перебираю список, чтобы записать те объекты CarOwner в FileStream.

    упаковка паркинги;

    импорт java.io.FileNotFoundException; import java.io.ObjectOutputStream; импорт java.io.IOException; импорт java.util.ArrayList; import java.util.Date; import java.util.List; import java.io.FileOutputStream; импорт java.util.Scanner;

    Публичный класс Регистрация { public static void main (String [] args) { Список carOwners = new ArrayList();

    Scanner input = new Scanner(System.in); 
        boolean canProceed = true; 
    
        while (canProceed) { 
         System.out.println("Press Y/y to add a new user"); 
         System.out.println("Press N/n to return to menu"); 
         String optionRequested = input.nextLine(); 
    
         if (optionRequested.equalsIgnoreCase("Y")) { 
          CarOwner owner = new CarOwner(); 
          System.out.println("Enter your student ID"); 
          owner.setStudentID(input.nextLine()); 
          System.out.println("Enter your first name"); 
          owner.setFirst(input.nextLine()); 
          System.out.println("Enter your last name"); 
          owner.setLast(input.nextLine()); 
          System.out.println("Enter your car number"); 
          owner.setCarNo(input.nextLine()); 
          System.out.println("Enter your contact number"); 
          owner.setContactNumber(input.nextLine()); 
          System.out.println("Enter your email address"); 
          owner.setEmail(input.nextLine()); 
          owner.setDateReg(new Date().toString()); 
          carOwners.add(owner); 
         } else if (optionRequested.equals("N") || optionRequested.equals("n")) { 
          canProceed = false; 
         } 
    
        } 
    
        ObjectOutputStream objectWriter = null; 
    
        for (CarOwner carOwner : carOwners) { 
         try { 
          objectWriter = new ObjectOutputStream(new FileOutputStream("carOwners.dat")); 
          objectWriter.writeObject(carOwner); 
         } catch (FileNotFoundException e) { 
          e.printStackTrace(); 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } 
        } 
    } 
    

    }

Вот что класс CarOwner теперь выглядит ...

package parkingsystem; 

import java.io.Serializable; 

public class CarOwner implements Serializable{ 
    private String First; 
    private String Last; 
    private String studentID; 
    private String email; 
    private String carNo; 
    private String dateReg; 
    private String contactNumber; 

    public CarOwner() { 
    } 

    public String getFirst() { 
     return First; 
    } 

    public void setFirst(String first) { 
     First = first; 
    } 

    public String getLast() { 
     return Last; 
    } 

    public void setLast(String last) { 
     Last = last; 
    } 

    public String getStudentID() { 
     return studentID; 
    } 

    public void setStudentID(String studentID) { 
     this.studentID = studentID; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public String getCarNo() { 
     return carNo; 
    } 

    public void setCarNo(String carNo) { 
     this.carNo = carNo; 
    } 

    public String getDateReg() { 
     return dateReg; 
    } 

    public void setDateReg(String dateReg) { 
     this.dateReg = dateReg; 
    } 

    public void setContactNumber(String contactNumber) { 
     this.contactNumber = contactNumber; 
    } 

    public String getContactNumber() { 
     return contactNumber; 
    } 

    @Override 
    public String toString() { 
     return "CarOwner{" + 
       "First='" + First + '\'' + 
       ", Last='" + Last + '\'' + 
       ", studentID='" + studentID + '\'' + 
       ", email='" + email + '\'' + 
       ", carNo='" + carNo + '\'' + 
       ", dateReg='" + dateReg + '\'' + 
       ", contactNumber='" + contactNumber + '\'' + 
       '}'; 
    } 
} 

ИТАК создания класса CarOwner делается, чтобы сделать старт на то, чтобы этот код более объектно-ориентированный.

Во-вторых, код с рефактором демонстрирует правильное использование логической переменной в Java.

Как уже отмечали другие комментаторы, оператор присваивания = легко путать с тестом на булевское равенство. См. Java Operators

Также я переименовал Boolean proceed; как Boolean canProceed; Это общая стратегия. Именование булеву переменную для чтения, как вопрос, к которому «ответ» есть, да или нет или Правда или Ложные.

Это значит, что мы можем написать код while(canProceed), который читается очень легко. См. Также if statement on the Java tutorial

Надеюсь, это поможет.

+1

Это определенно помогло мне лучше понять. Однако теперь я запутался, если я предположил, что вы распечатали файл через класс владельца автомобиля или во время процесса ввода. – user3079414

+0

OK перечитайте свой вопрос. У меня есть понимание того, чего вы пытаетесь достичь. Я уточню свой ответ. –

+1

'String' имеет метод' equalsIgnoreCase'. Он также имеет методы 'toLowerCase' и' toUpperCase'. Сравнение обоих возможных случаев - один из семи смертных грехов *. (* Есть много больше семи.) –

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