Sortowanie

0

Witam. Nie jestem dobra z programowania, ale staram się, jednak mam problem z sortowaniem danych w tabeli i razem z kolegą kompletnie nie wiemy o co chodzi. Nie wyrzuca żadnych błędów ale jednak nie sortuje. Proszę o pomoc. W razie czego mogę podesłać więcej fragmentów kodu.

import java.text.*;
import java.util.*;
import javax.swing.table.DefaultTableModel;
import com.thoughtworks.xstream.XStream;
import java.io.*;

public class Logika {

	static double cen;
	static Date data;
	static Short czas;
	static int ocena; 
	static int nr;
	static int n=0;
	static DateFormat format=new SimpleDateFormat("yyyy");
	
	public static void main(String[] args) throws ParseException {		
		Grafika g=new Grafika();
		
		if(args.length==0)
			g.setVisible(true);
		
		if(args.length>0) {
			g.setVisible(false);
			if(args[0].equals("notsort")) {
				System.out.println(Dane.lista);
			}
		
				if(args[1].equals("nazwasort")) {
					nazwasort();
					System.out.println(Dane.lista);
				}
					
				if(args[1].equals("censort")) {
					censort();
					System.out.println(Dane.lista);
				}
					
				if(args[1].equals("datasort")) {
					datasort();
					System.out.println(Dane.lista);
				}
				if(args[1].equals("czassort")) {
					czassort();
					System.out.println(Dane.lista);
				}
			}

		}
	
	/**
	 * Sortowanie według tytułu gry
	 */
	public static void nazwasort() {
		KompN k=new KompN();
		Collections.sort(Dane.lista, k);
	}
	/**
	 * Sortowanie według ceny gry
	 */
	public static void censort() {
		KompC k=new KompC();
		Collections.sort(Dane.lista, k);
	}
	
	/**
	 * Sortowanie według daty premiery
	 */
	public static void datasort() {
		KompD k=new KompD();
		Collections.sort(Dane.lista, k);
	}
	/**
	 * Sortowanie według czasu gry
	 */
	public static void czassort() {
		KompJ k=new KompJ();
		Collections.sort(Dane.lista, k);
	}
	
	public static void dodawanieDanych() throws ParseException{
		cen=Double.parseDouble(Grafika.cen);
		data=format.parse(Grafika.data);
		czas=Short.parseShort(Grafika.czas);
		ocena=Integer.parseInt(Grafika.ocena);
		//wypisanie danych w tabeli
		Obiekt_Dane od=new Obiekt_Dane(ocena, Grafika.wydawca);
		Dane.lista.add(new Dane(Grafika.nazwa, cen, data, czas, od));
	}

	public static void modyfikacjaDanych() throws ParseException{
		cen=Double.parseDouble(Grafika.cen);
		data=format.parse(Grafika.data);
		czas=Short.parseShort(Grafika.czas);
		ocena=Integer.parseInt(Grafika.ocena);
		nr=Integer.parseInt(Grafika.nr);
		Obiekt_Dane od=new Obiekt_Dane(ocena, Grafika.wydawca);
		Dane d=new Dane(Grafika.nazwa, cen, data, czas, od);
		Dane.lista.set(nr-1, d);
		
	}

	public static void usuwanieDanych() {
		nr=Integer.parseInt(Grafika.nr);
		Dane.lista.remove(nr-1);
	}

	public static void zapisDanych() {
		try {
			XStream xstream=new XStream();
			String tekst=xstream.toXML(Dane.lista);
			File xml=new File(Grafika.plik);
			xml.createNewFile();
			FileWriter fw=new FileWriter(xml);
			fw.write(tekst);
			fw.close();
		}
		catch(IOException e){
			System.out.println(e.getMessage());
		}
	}

	public static void otworzXML() {
		XStream xstream=new XStream();
		try {
			Dane.lista.addAll((Collection<Dane>)xstream.fromXML(new FileReader(Grafika.plik)));
			Dane d=Dane.lista.get(Dane.lista.size()-1);
		}
		catch (FileNotFoundException e) {
			System.out.println(e.getMessage());
		}
	}
	}

Fragment kodu z klasy Grafika

		if(z==rdbtnNazwa) {
			Logika.nazwasort();
			 StatusBar.setText("Posortowano według Nazwy.");
		}
	
		if(z==rdbtnPremiera) {
			Logika.datasort();
			StatusBar.setText("Posortowano według Daty Premiery.");
		}
		
		if(z==rdbtnCzasGry) {
	   		 Logika.censort();
	   		 StatusBar.setText("Posortowano według Ceny.");
		}
	
		if(z==rdbtnCena) {
			 Logika.czassort();
	   		 StatusBar.setText("Posortowano według Czasu.");
		}

	public static void nazwasort() {
		KompN k=new KompN();
		Collections.sort(Dane.lista, k);
	}

	public static void censort() {
		KompC k=new KompC();
		Collections.sort(Dane.lista, k);
	}
	
	public static void datasort() {
		KompD k=new KompD();
		Collections.sort(Dane.lista, k);
	}

	public static void czassort() {
		KompJ k=new KompJ();
		Collections.sort(Dane.lista, k);
	}

KompN wygląda identycznie jak KompC, KompD, KompJ

 import java.util.Comparator;
public class KompN implements Comparator<Dane> {
	public int compare(Dane dane1, Dane dane2) {
		if(dane1.getnazwa().compareTo(dane2.getnazwa())<0)
			return -1;
		if(dane1.getnazwa().compareTo(dane2.getnazwa())>0)
			return 1;
		else
			return 0;
	}
}

Z góry dzięki za poświęcenie chwilki.
Pozdrawiam

0

Dlaczego wszystko robisz na polach statycznych...?

0

Wrzuć wszystkie klasy: KompN, KompC, KompD, KompJ które implementują ** Comparator** . Nie wiemy czy masz je poprawnie zrobione
Zmień nazwy tych klas bo są one kompletnie nieczytelne :)
Czyli:
Zamiast KompN nazwij tą klasę: nazwaComparator

import java.util.Comparator;
public class nazwaComparator implements Comparator<Dane> {
    @Override
    public int compare(Dane dane1, Dane dane2) {
            return dane1.getnazwa().compareTo(dane2.getnazwa())
    }
}

Analogicznie pozostałe komparatory powinny wyglądac tak:

Zamiast KompC nazwij tą klasę: cenaComparator
Zakładam że zmienna * cena* jest typu ** double** w klasie * Dane* więc:

import java.util.Comparator;
public class cenaComparator implements Comparator<Dane> {
    @Override
    public int compare(Dane dane1, Dane dane2) {
            return Double.compare(dane1.getCena(), dane2.getCena());
    }
}

Zamiast KompD nazwij tą klasę: dataComparator
Zakładam że zmienna data jest typu ** Date** w klasie * Dane* więc:

import java.util.Comparator;
public class dataComparator implements Comparator<Dane> {
    @Override
    public int compare(Dane dane1, Dane dane2) {
            return dane1.getData().compareTo(dane2.getData())
    }
}

Zamiast KompJ nazwij tą klasę: czasGryComparator
Zakładam że zmienna czas jest typu ** Short** w klasie * Dane* więc:

import java.util.Comparator;
public class czasGryComparator implements Comparator<Dane> {
    @Override
    public int compare(Dane dane1, Dane dane2) {
            return dane1.getCzas().compareTo(dane2.getCzas())
    }
}

Na wstępie tyle :) Jeśli to nie pomoże, to wrzuć resztę kodu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1