Почему я не могу создать объект TreeSet из файла? - PullRequest
0 голосов
/ 23 апреля 2020
class Color implements Comparable<Color>{
    private long RValue;
    private long GValue;
    private long BValue;
    public long mix;
    public Color() {
        this.RValue=0;
        this.GValue=0;
        this.BValue=0;
        this.mix=0;
    }
    public Color(long c) {
        this.RValue=c;
        this.GValue=c;
        this.BValue=c;
        this.mix=c;
    }
    private void calcMix() {
        this.mix=256*256*this.RValue+256*this.GValue+1*this.BValue;
    }
    public long getRValue() {
        return this.RValue;
    }
    public long getGValue() {
        return this.GValue;
    }
    public long getBValue() {
        return this.BValue;
    }
    public void setRValue(long RValue) {
        this.RValue=RValue;
        calcMix();
    }
    public void setGValue(long GValue) {
        this.GValue=GValue;
        calcMix();
    }
    public void setBValue(long BValue) {
        this.BValue=BValue;
        calcMix();
    }
    public String toString() {
        return this.RValue+" "+this.GValue+" "+this.BValue+" "+this.mix;
    }   
    public boolean equals(Object r) {
        if(r==this)
            return true;
        if(r==null)
            return false;
        if(r.getClass()!=this.getClass())
            return false;
        Color color=(Color) r;
        if(this.RValue!=color.RValue || this.GValue!=color.GValue || this.BValue!=color.BValue)
            return false;
        return true;
    }
    public int compareTo(Color c) {
    if(this.mix<c.mix)
        return -1;
    else if(this.mix==c.mix)
        return 0;
    else 
        return 1;
}
}
class ColorRectangle extends Color implements Comparable<Color>{
    private int iX1,iY1,iX2,iY2;
    public ColorRectangle() {
        super();
        iX1=0;
        iY1=0;
        iX2=0;
        iY2=0;
    }
    public ColorRectangle(int iX1,int iY1,int iX2,int iY2,long color) {
        super(color);
        this.iX1=iX1;
        this.iY1=iY1;
        this.iX2=iX2;
        this.iY2=iY2;               
    }
    public int getIX1() {
        return iX1;
    }
    public int getIY1() {
        return iY1;
    }
    public int getIX2() {
        return iX2;
    }
    public int getIY2() {
        return iY2;
    }
    public void setIX1(int iX1) {
        this.iX1=iX1;
    }
    public void setIY1(int iY1) {
        this.iY1=iY1;
    }
    public void setIX2(int iX2) {
        this.iX2=iX2;
    }
    public void setIY2(int iY2) {
        this.iY2=iY2;
    }
    public int calcArea() {
        return ((Math.max(this.iX1, this.iX2)-Math.min(this.iX1, this.iX2))*
                (Math.max(this.iY1, this.iY2)-Math.min(this.iY1, this.iY2)));
    }
    public int calcPerimeter() {
        return (2*(Math.max(this.iX1, this.iX2)-Math.min(this.iX1, this.iX2))+
                2*(Math.max(this.iY1, this.iY2)-Math.min(this.iY1, this.iY2)));
    }
    public int compareTo(ColorRectangle r) {
        if(this.calcArea()<r.calcArea())
            return -1;
        else if(this.calcArea()==r.calcArea())
            return 0;
        else
            return 1;
    }
    public String toString() {
        return iX1+" "+iY1+" "+iX2+" "+iY2+" "+mix;
    }
    public boolean equals(ColorRectangle r) {
        if(!(r instanceof ColorRectangle))
            return false;
        ColorRectangle rect=r;
        return (this.calcArea()==rect.calcArea() && this.getRValue()==rect.getRValue() 
                && this.getGValue()==rect.getGValue() && this.getBValue()==rect.getBValue());
    }
    public void translateX(int iPoints) {
        this.iX1+=iPoints;
        this.iX2+=iPoints;
    }
    public void translateY(int iPoints) {
        this.iY1+=iPoints;
        this.iY2+=iPoints;
    }
    public void translateXY(int iPoints) {
        this.translateX(iPoints);
        this.translateY(iPoints);
    }
    public boolean isInside(int ptX,int ptY) {
        if(ptX>iX1 && ptX<iX2 && ptY>iY1 && ptY<iY2)
            return true;
        return false;   
    }
    public ColorRectangle unionRect(ColorRectangle r) {
        int x1=Math.min(Math.min(this.iX1, this.iX2), Math.min(r.getIX1(),r.getIX2()));
        int x2=Math.max(Math.min(this.iX1, this.iX2),Math.max(r.getIX1(), r.getIX2()));
        int y1=Math.min(Math.min(this.iY1, this.iY2), Math.min(r.getIY1(),r.getIY2()));
        int y2=Math.max(Math.min(this.iY1, this.iY2),Math.max(r.getIY1(), r.getIY2()));
        long color=256*256*this.getRValue()+256*this.getGValue()+1*this.getBValue();
        return new ColorRectangle(x1,x2,y1,y2,color);
    }
    public ColorRectangle intersectionRect(ColorRectangle r) {
        int x1=Math.min(this.iX1,r.iX2);
        int x2=Math.max(this.iX1,r.iX2);
        int y1=Math.min(this.iY1, r.iY2);
        int y2=Math.max(this.iY1, r.iY2);
        long color=256*256*this.getRValue()+256*this.getGValue()+1*this.getBValue();
        return new ColorRectangle(x1,x2,y1,y2,color);
    }

}

 class RectangleCollection{
        private SortedSet recSet;
        public RectangleCollection(String fileName) throws IOException{
            try {
                RandomAccessFile file=new RandomAccessFile(fileName,"r");
                String line="";
                String[] info=new String[5];
                recSet=new TreeSet<ColorRectangle>();
                while((line=file.readLine()) != null && line.length()>0 ) {
                    info=line.split(" ");
                    recSet.add(new ColorRectangle(Integer.parseInt(info[0]), 
                            Integer.parseInt(info[1]),Integer.parseInt(info[2]),Integer.parseInt(info[3]),
                            Long.parseLong(info[4])));
                }
                file.close();
            }
            catch(FileNotFoundException e) {
                System.out.println(e.getMessage());
            }
        }
        public void print() {
            Iterator<RectangleCollection>iterator=recSet.iterator();
            while(iterator.hasNext()) {
                System.out.println(iterator.next()+" ");
            }
        }
    }

Это моя основная функция:

    public static void main(String[] args)throws IOException {
        RectangleCollection recCol=new RectangleCollection("rects.txt");
        recCol.print();
    }

Итак, у меня есть этот код в java и класс RectangleCollection.

Моя задача - создать интерфейс SortedSet типа TreeSet, который будет предназначен для хранения ColorRectangle объектов. ColorRectangle класс имеет 5 членов данных: x1, x2, y1, y2, цвет .

Я должен сделать явный конструктор с именем -> имя файла, из которого я буду читать ColorRectangle объекты, которые я добавлю в TreeSet.

, и это мой текстовый файл rects.txt:

-10 -10 6 10 255
-1 -1 10 6 255
-2 -2 10 6 255
*-3 -1 10 6 255
-1 -1 10 6 255

Когда я отлаживаю его, функция печати показывает мне только первая строка из текстового файла. Можете ли вы сказать мне, как это исправить?

...