2012-04-23 2 views
0

У меня возникли проблемы с изменением числа ISBN на имя названия книгиПроблемы с ArrayList в коде, любые советы?

Старты печати ISBN, автор, название и уровень книги слева:

0201403765 Jan Skansholm Ada 95 from the Beginning 100 
0202535665 M. Ben-Ari   Software Engineering   25 
034565976X Michael Feldman Program Construction   12 
080539057X M.A. Weiss   Data Structures    30 
0805645782 Ken Arnold   Java for Programmers   10 
0905297568 A. Badone   Chaos Theory     15 

Печатает Что в transactions.txt:

0201403765  -55 
0201403765  2 
0202535665  10 
0202535665  -28 
034565976X  -7 
080539057X  -15 
0905297568  13 
0905297568  -5 

Поэтому в основном то, что мне нужно сделать, это изменить ISBN в название книги, если она соответствует, как это:

Java from the Beginning -55 
Java from the Beginning 2 
Software Engineering  10 
Software Engineering -28 
Program Construction  -7 
Data Structures -15 
Chaos Theory  13 
Chaos Theory  -5 

Проблема с им есть в 1, помеченном в коде ниже, действительно не уверен, как проверить, соответствует ли isbn, и если да, то как проверить, что название соответствует isbn и записать его, я думаю, что моя проблема - это arraylist (должен я сделать третий arraylist) или просто сделать все в массивы, любой совет будет делать, приветствует !!!! Кстати 1 полностью ludacrisly неправильно ....

import java.util.*; 
import java.io.*; 
class inventory{ 
    static void intial(){ 
     try{ 
      RandomAccessFile in = new RandomAccessFile("books.dat","r"); 
      ArrayList<String> list1=new ArrayList<String>(); 
      String author ,title , isbn; 
      int level=0; 
      while(in.getFilePointer()<in.length()){ 
       author = in.readUTF(); // author, at most 20 characters 
       title = in.readUTF(); // title, at most 40 characters 
       isbn = in.readUTF(); // ISBN 
       level = in.readInt(); // level, i.e. copies in stock (>=0) 
      //System.out.printf("%5d", isbn+author+title+level); 
      System.out.println(isbn+" "+author+" "+title+" "+level); 
      list1.add(title); 
      list1.add(isbn); 
      //list1.add(level); 
     } 
     in.close(); 
     System.out.println(" "); 
     String isbn2; 
     int level2=0; 
     //try{ 
      Scanner out = new Scanner(new File ("transactions.txt")); 
      ArrayList<String> list2=new ArrayList<String>(); 
      while(out.hasNextLine()){ 
       isbn2 = out.next(); 
       level2 = out.nextInt(); 
       System.out.println(isbn2 +" "+level2); 
       list2.add(isbn2); 
       //list2.add(level2); 
      } 
      out.close(); 

    1)  for (isbn: list1){ 
      for(isbn2: list2){ 
       if(isbn.contains(isbn2)){ 
        System.out.println(title+" "+level); 
       } 
      } 
     } 
     } 
     catch(IOException f){ 
      System.out.println("file error"); 
      f.printStackTrace(); 
     } 
    } 

} 
class BookShop{ 
    public static void main(String[]args){ 
     inventory x = new inventory(); 
     x.intial(); 
+0

отступы от BTW –

+1

Мои глаза болят ... –

+1

так исправить на отступы – MByD

ответ

3

Я хотел бы создать объект, чтобы держать каждую книгу, как это:

class Book { 
    public final String isbn; 
    public final String title; 
    public final String author; 
    public final int level; 

    public Book(String isbn, String title, String author, int level) { 
     this.isbn = isbn; this.title = title; this.author = author; this.level = level; 
    } 
} 

и заполнить ArrayList с объектами книги. Таким образом, все для одной Книги находится в одном месте, а не в параллельных массивах.

(Способ, которым я написал этот класс, является неизменным, потому что у вас нет причин обновлять объекты после их чтения из входного файла. Если это был Python или Haskell, мы просто использовали бы кортеж и обойтись без церемонии, но с Java у нас нет такой опции.)

+0

This.isbn ??? вы создаете книгу –

+0

@ Андрю: извините, я не понимаю вашего вопроса –

3

Сначала создайте объект Book для хранения ваших данных книги.

public Book{ 
    private String ISBN =""; 
    private String title=""; 
    private String author=""; 
    private int level; 
    public Book(String ISBN, String title,String author, int level){ 
     this.ISBN=ISBN; 
     this.title=title; 
     this.author=author; 
     this.level=level; 
    } 
    public String getTitle(){ 
     return title; 
    } 
    public String getISBN(){ 
     return ISBN; 
    } 
    public String getAuthor(){ 
     return author; 
    } 
    public int getLevel(){ 
     return level; 
    } 
} 

Добавить объекты книги в ArrayList.

ArrayList<Book> bkList = new ArrayList<Book>(); 
bkList.add(new Book('ISBN','Title','Author')); 

Получить данные книги с помощью метода get().

Book tempBook; 
for (int x=0;x<bkList.Size();x++){ 
    tempBook=bkList.get(x); 
    System.out.println(tempBook.getTitle()+" "+tempBook.getLevel()); 
} 
+0

инвентарь книг должен быть прочитан из randomAccessFile ("books.dat"), и изменения должны быть прочитаны из txt file ("transaction.txt"), так что просто я просто сделаю это: while (in.getFilePointer()

+0

Не совсем. Конструктор книг должен иметь значения для ISBN, Author, level и Title. – eabraham

+0

так bkList.add (новая книга ('ISBN', 'Title', 'Author', 'level')); –

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