2016-09-23 2 views
-1

Это мой проект, где мне нужно реализовать наследование, полиморфизм и io.
Надеюсь, кто-то может мне помочь. У меня есть текстовый файл с данными сумок.Чтение входного файла в абстрактный суперкласс java

Local, Рюкзак, Нью-Йорк, черный, 45,00; 5
Местный, рюкзак, швейцарский Polo, серый; 59,00; 1
Местный, рюкзак, Билл Кит, синий 50,00; 2
импорт; сумка; Padini , Желтый, 120,00; 3
Импорт; Сумочка; PDI; Красный; 170,00; 2
импорт; сумка; P &CO; зеленый; 200,00; 1

У меня есть абстрактный суперкласс с конструктором, аксессором и методом ToString, которые состоят из ItemType, bagType, марки, цвета, цены и количества согласно данным соответственно.

У меня также есть 2 подкласса, Импорт и локальные, которые распространяются из мешка суперкласса, наследующего один и тот же атрибут от суперкласса.

У меня проблема с чтением данных в массив абстрактного суперкласса, потому что он скажет, что абстрактный класс не может быть создан. Да, я знаю это. Итак, что мне делать, чтобы я мог считывать данные в массив?

Это мой абстрактный суперкласс Bag:

public abstract class Bag 
 
{ 
 
    private String bagType; 
 
    private String colour; 
 
    private String brand; 
 
    private int quantity; 
 
    private double price; 
 
    
 
    //default constructor 
 
    public Bag() 
 
    { 
 
     bagType = " "; 
 
     colour = " "; 
 
     brand = " "; 
 
     quantity = 0; 
 
     price = 0.00; 
 
    } 
 

 
    //normal constructor 
 
    public Bag(String bagType, String brand, String colour, double price, int quantity) 
 
    { 
 
     this.bagType = bagType; 
 
     this.brand = brand; 
 
     this.colour = colour; 
 
     this.price = price; 
 
     this.quantity = quantity; 
 
    } 
 

 
    //accessor method 
 
    public String getColour() 
 
    { 
 
     return colour; 
 
    } 
 
    public String getBrand() 
 
    { 
 
     return brand; 
 
    } 
 
    public int getQuantity() 
 
    { 
 
     return quantity; 
 
    } 
 
    public double getPrice() 
 
    { 
 
     return price; 
 
    } 
 
    
 
    //mutator method 
 
    public void setBagType(String bt) 
 
    { 
 
     bagType = bt; 
 
    } 
 
    public void setColour(String c) 
 
    { 
 
     colour = c; 
 
    } 
 
    public void setBrand(String b) 
 
    { 
 
     brand = b; 
 
    } 
 
    public void setQuantity(int q) 
 
    { 
 
     quantity = q; 
 
    } 
 
    public void setPrice(double p) 
 
    { 
 
     price = p; 
 
    } 
 

 
    //abstract method 
 
    public abstract double calcPrice(); 
 

 
    //toString method 
 
    public String toString() 
 
    { 
 
     return 
 
     "\nBag Type  : " + bagType + 
 
     "\nItem Colour : " + colour + 
 
     "\nItem Brand : " + brand + 
 
     "\nItem Quantity : " + quantity + 
 
     "\nPrice   : " + price; 
 
    } 
 
}

И это мой тестовый класс:

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

 
public class TestBag 
 
{ 
 
    public static void main(String [] args) 
 
    { 
 
     try 
 
     { 
 
      BufferedReader in = new BufferedReader(new FileReader("Bag.txt")); 
 

 
      PrintWriter Import = new PrintWriter(new BufferedWriter(new FileWriter("Import.txt"))); 
 
      PrintWriter Local = new PrintWriter(new BufferedWriter(new FileWriter("Local.txt"))); 
 
      
 
      String data = null; 
 
      int size = 0; 
 
      while((data = in.readLine()) != null)/**read data to count the no of records*/ 
 
      { 
 
       StringTokenizer input = new StringTokenizer(data,";"); 
 
       size++; 
 

 
      } 
 
      in.close(); 
 
      
 
      /**reopen the input file*/ 
 
      in = new BufferedReader(new FileReader("Bag.txt")); 
 
      Bag b [] = new Bag[size]; 
 
      int index = 0; 
 
      while((data = in.readLine()) != null) //read the contents of file and process the data 
 
      { 
 
       StringTokenizer inData = new StringTokenizer(data,";"); 
 
       
 
       String type = inData.nextToken(); 
 
       String bagType = inData.nextToken(); 
 
       String brand = inData.nextToken(); 
 
       String colour = inData.nextToken(); 
 
       double price = Double.parseDouble(inData.nextToken()); 
 
       int quantity = Integer.parseInt(inData.nextToken()); 
 
       
 
       if(type.equalsIgnoreCase("Import")) //Import 
 
       { 
 
        b[index] = new Import(bagType, brand, colour, price, quantity); 
 
        System.out.println(b[index].toString()); 
 
        
 
       } 
 
       else if(type.equalsIgnoreCase("Local")) 
 
       { 
 
        b[index] = new Local(bagType, brand, colour, price, quantity); 
 
        System.out.println(b[index].toString()); 
 
       } 
 
       
 
       index++; 
 
      } 
 
      
 
      // 
 
      
 
      in.close(); 
 
      Import.close(); 
 
      Local.close(); 
 
      
 
     } 
 
     //end of try 
 
     catch(FileNotFoundException fnfe) 
 
     { System.out.print(fnfe.getMessage());} 
 
     catch(IOException io) 
 
     { System.out.print(io.getMessage());} 
 
     catch(Exception e) 
 
     { System.out.print(e.getMessage());} 
 
    } 
 

 
}

Прошу прощения. Я все еще новичок в java.

+0

Я не вижу абстрактного класса в коде, который вы опубликовали. –

+0

Абстрактный класс находится в классе Bag, который является суперклассом, это класс testBag, где я проверяю свой код. – Nabella

+0

Извините, мой хрустальный шар сломан, поэтому я не вижу ваш класс 'Bag', если вы его не покажете. –

ответ

-1

Если ваш Bag является абстрактным, то нельзя позвонить new Bag().

Вам нужно будет проверить тип bagType и создать класс в соответствии с ним.

if(type.equals("import")){ 
    b[index] = new ImportBag (type, bagType, brand, colour, price, quantity); 
} else { 
    b[index] = new LocalBag (type, bagType, brand, colour, price, quantity); 
} 

Arraylist может оказаться более полезным, чем массив.

+0

Между вашими орфографическими ошибками и вашими предположениями о том, что @OP имеет/хочет, это нестандартный ответ – ControlAltDel

+0

Прошу прощения за орфографические ошибки. Английский - это не моя матушка, и я использовал свой смартфон, чтобы написать это. Не могли бы вы рассказать мне, как я могу улучшить свой ответ? – noCma

+0

Я уже создаю массив для подкласса, но когда я пытаюсь скомпилировать, это появляется 'Для строки ввода:" 5 "' – Nabella

0

Прежде всего, читайте об абстрактных классах здесь: Abstract Methods and Classes, также я не вижу никаких подрядчиков в вашем коде ... Вам нужно создать их самостоятельно?

+0

Абстрактный класс находится в классе Bag, который является суперклассом, это класс testBag, где я проверяю свой код , Все конструкторы также находятся в сумке суперкласса и подклассе Import, Local. – Nabella

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