banjalukaforum.com https://banjalukaforum.com/ |
|
Java sortiranje https://banjalukaforum.com/viewtopic.php?f=18&t=48386 |
Stranica 1 od 1 |
Autoru: | mehom [ 10 Mar 2010, 11:10 ] |
Tema posta: | Java sortiranje |
Pozdrav, ako neko moze da mi pomogne sa sortiranjem slijedeceg texta koji je upisan u fajl. Tim: Sarajevo Bodova: 7.0 Tim: �eljo Bodova: 2.0 Tim: Vele� Bodova: 3.0 Tim: �elik Bodova: 5.0 Tim: Travnik Bodova: 3.0 Tim: Zrinjski Bodova: 3.0 rezultat sortiranja bi bila tabela poredana po bodovima. Unaprijed se zahvaljujem na odgovorima. |
Autoru: | Hristov [ 10 Mar 2010, 13:50 ] |
Tema posta: | Re: Java sortiranje |
Pozdrav mehom, Je li ti to za skolu/faks treba? Predlazem da postavis ovdje svoje rijesenje pa ce ti ljudi dati neke sugestije. |
Autoru: | mehom [ 10 Mar 2010, 14:05 ] |
Tema posta: | Re: Java sortiranje |
Pozdrav Hristov, hvala na sugestijama, ja sam probao ovo ali ne radi: public void Tabela() throws Exception { File f = new File("Tabela.txt"); FileReader fr = new FileReader(f); BufferedReader br = new BufferedReader(fr); StringBuffer sb = new StringBuffer(); String eachLine = br.readLine(); while (eachLine != null) { sb.append(eachLine); sb.append("\n"); eachLine = br.readLine(); } // { String [] testNiz = {sb.toString()}; Arrays.sort(testNiz); System.out.println(Arrays.toString(testNiz)); } |
Autoru: | Hristov [ 10 Mar 2010, 14:10 ] |
Tema posta: | Re: Java sortiranje |
Kod ubacuj u 'Code' tag, nalazi se u lajsni sa tagovima za formatiranje, iznad polja za pisanje posta. Bice citljivije. Evo ti rijesenja: Kod: import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; public class Sort { public static void main(String[] args) throws Exception { File file = new File("text.txt"); BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file))); ArrayList<String> lines = new ArrayList<String>(10); String line; while((line = reader.readLine()) != null) { lines.add(line); } String[] sorted = lines.toArray(new String[lines.size()]); sortRawTeamData(sorted, true); for(int i = 0; i < sorted.length; i++) { System.out.println(sorted[i]); } } private static void sortRawTeamData(String[] strings, final boolean ascending) { Arrays.sort(strings, new Comparator<String>() { public int compare(String line1, String line2) { String seg1 = line1.substring(line1.lastIndexOf(':') + 1).trim(); String seg2 = line2.substring(line2.lastIndexOf(':') + 1).trim(); double p1 = Double.parseDouble(seg1); double p2 = Double.parseDouble(seg2); return (int)((p1 - p2) * (ascending? 1:-1)); } }); } } Output je: Kod: Tim: Zeljo Bodova: 2.0 Tim: Velez Bodova: 3.0 Tim: Travnik Bodova: 3.0 Tim: Zrinjski Bodova: 3.0 Tim: Celik Bodova: 5.0 Tim: Sarajevo Bodova: 7.0 Jesi li to trebao? |
Autoru: | mehom [ 10 Mar 2010, 14:19 ] |
Tema posta: | Re: Java sortiranje |
Ko zna, zna, da to je to s tim da je ovdje output od najmanjeg ka najvecem a trebalo bi obratno. |
Autoru: | Hristov [ 10 Mar 2010, 14:27 ] |
Tema posta: | Re: Java sortiranje |
Onda samo ubacis 'false' umjesto 'true' kao argument pri pozivu metode sortRawTeamData. Super, drago mi je da sam ti pomogao. |
Autoru: | mehom [ 10 Mar 2010, 14:51 ] |
Tema posta: | Re: Java sortiranje |
Zahvaljujem ti se na svesrdnoj pomoci, ali ja sam izgleda pukao. Postavicu cijeli kod pa te molim ako imas vremena da mi kazes gdje grijesim. pozzz Kod: /*
* To change this template, choose Tools | Templates * and open the template in the editor. */ package fudbalskirezultati; import java.io.*; import java.util.*; /** * * @author */ public class Main { public static void main(String[] args) throws Exception { char izbor; //varijabla zaunos izbora... Scanner scanner = new Scanner(System.in); do { System.out.println("\n\n\n********* F U D B A L **********"); System.out.println(""); System.out.println("1)Unos novog tima"); System.out.println("2)Unos novog rezultata"); System.out.println("3)Prikaz tabele"); System.out.println("x)Izlazizprograma"); System.out.println(""); System.out.println("***************************************"); String tString = scanner.next(); izbor = tString.charAt(0); Main vd = new Main(); switch(izbor) { //unos novog tima case '1': { vd.UnosNovogTima(); break; } //unos rezultata case '2': { vd.UnosNovogRezultata(); break; } // prikaz tabele case '3': { vd.Tabela(); break; } //izlaz case 'x': { System.out.println("Izlaz iz programa..."); break; } default: { System.out.print("Unijeli ste pogrešan izbor, pokušajte ponovo. \n"); break; } } }while(izbor != 'x'); } public boolean ProvjeraDaLiElementPostoji(String file, String element) { boolean element_postoji = false; FileInputStream fin; DataInputStream in; BufferedReader br; String postojeci_element; try { fin = new FileInputStream(file); in = new DataInputStream(fin); br = new BufferedReader(new InputStreamReader(in)); // citaj fajl liniju po liniju while ((postojeci_element = br.readLine()) != null) { // Ako se element pronađe postavi varijablu na true... if(postojeci_element.equals(element)) element_postoji = true; } in.close(); } //Ako se desi greška pri čitanju fajla... catch (IOException e) { System.err.println("Greška pri čitanju fajla: " + file); System.exit(-1); } //ako je element pronađen vrati true, inače vrati false... return element_postoji; } //Prije unosa rezultata timova, potrebno je unijeti timove koji učestvuju... public void UnosNovogTima() { Scanner scanner = new Scanner(System.in); System.out.println("\nUnesite naziv Tima:"); String naziv_tima = scanner.nextLine(); System.out.println("Unesite pocetni broj bodova:"); // podrazumjevano je 0 String broj_bodova = scanner.nextLine(); //provjera da li tim već postoji... //ako postoji samo promijeni liniju i dodaj nove bodove.. boolean artikal_postoji = false; try { FileReader fr = new FileReader("Tabela.txt"); BufferedReader br = new BufferedReader(fr); final String NEW_LINE = System.getProperty("line.separator"); StringBuffer sb = new StringBuffer(); String line; Float nova_kolicina; Float stara_kolicina; // čitaj fajl liniju po liniju... while ((line = br.readLine()) != null) { // Ako pronađe tim samo povećaj bodove... if(line.contains(naziv_tima + " Bodova: ")) { stara_kolicina = Float.valueOf(line.replace("Tim: " + naziv_tima + " Bodova: ", "")); nova_kolicina = stara_kolicina + Float.valueOf(broj_bodova); sb.append("Tim: " + naziv_tima + " Bodova: " + Float.toString(nova_kolicina)); sb.append(NEW_LINE); artikal_postoji = true; } else { sb.append(line); sb.append(NEW_LINE); } } //nakon sto je procitan cijeli fajl i nije pronadjen tim, radi se o novom timu... //upisi novu liniju u buffer a kasnije u fajl Tabela.txt... if(artikal_postoji == false) { sb.append("Tim: " + naziv_tima + " Bodova: " + broj_bodova); sb.append(NEW_LINE); } fr.close(); //Upisi sadrzaj buffera nazad u Tabela.txt... PrintWriter pw= new PrintWriter(new FileWriter("Tabela.txt")); pw.print(sb.toString()); pw.close(); } catch (FileNotFoundException ex) // ako fajl ne postoji... { ex.printStackTrace(); } catch (IOException ex) //ako je došlo do greške prilikom upisa u fajl... { ex.printStackTrace(); } System.out.println("Tim: " + naziv_tima.trim() + " i početni bodovi, su uspješno unešeni.\n"); } public void UnosNovogRezultata() { Scanner scanner = new Scanner(System.in); System.out.println("\nUnesite naziv tima1:"); String tim1 = scanner.nextLine(); System.out.println("\nUnesite naziv tima2:"); String tim2 = scanner.nextLine(); System.out.println("Unesite broj golova tim1:"); String g1 = scanner.nextLine(); System.out.println("Unesite broj golova tim2:"); String g2 = scanner.nextLine(); //provjera da li timovi vec postoje... //ako postoje samo promijeniti liniju i dodati bodove... boolean artikal_postoji = false; { // potrebno je sting pretvoriti u integer radi > i < koje ne radi u stringu :)))) int r1 = Integer.parseInt(g1); int r2 = Integer.parseInt(g2); if(r1<r2) { r1=0; r2=3; } else { if(r1>r2) { r1=3; r2=0; } else { r1=1; r2=1; } } // vrati u string... String bod1 ; String bod2 ; bod1=Float.toString(r1); bod2=Float.toString(r2); try { FileReader fr = new FileReader("Tabela.txt"); BufferedReader br = new BufferedReader(fr); final String NEW_LINE = System.getProperty("line.separator"); StringBuffer sb = new StringBuffer(); String line; Float novi_bodovi; Float stari_bodovi; Float BodPrije; Float BodPoslije; // čitaj fajl liniju po liniju... while ((line = br.readLine()) != null) { // Ako se tim pronađe samo povecaj broj bodova... if(line.contains(tim1 + " Bodova: ")) { stari_bodovi = Float.valueOf(line.replace("Tim: " + tim1 + " Bodova: ", "")); novi_bodovi = stari_bodovi + Float.valueOf(bod1); sb.append("Tim: " + tim1 + " Bodova: " + Float.toString(novi_bodovi)); sb.append(NEW_LINE); } else if (line.contains(tim2 + " Bodova: ")) { BodPrije = Float.valueOf(line.replace("Tim: " + tim2 + " Bodova: ", "")); BodPoslije = BodPrije + Float.valueOf(bod2); sb.append("Tim: " + tim2 + " Bodova: " + Float.toString(BodPoslije)); sb.append(NEW_LINE); artikal_postoji = true; } else { sb.append(line); sb.append(NEW_LINE); } } //ako nakon sto je procitan cijeli fajl nije pronadjen tim, radi se o novom timu (imaće dupli unos tima)... //upisi novu liniju u buffer i kasnije u fajl... if(artikal_postoji == false) { sb.append("Tim: " + tim1 + " Bodova: " + bod1); sb.append(NEW_LINE); // sb.append("Tim: " + tim2 + " Bodova: " + bod2); sb.append(NEW_LINE); } fr.close(); // Upiši buffer nazad u fajl... PrintWriter pw= new PrintWriter(new FileWriter("Tabela.txt")); pw.print(sb.toString()); pw.close(); } // Izuzetci catch (FileNotFoundException ex) // ako fajl ne postoji... { ex.printStackTrace(); } catch (IOException ex) //ako je došlo do greške prilikom upisa u fajl... { ex.printStackTrace(); } System.out.println("Utakmica: " + tim1.trim() +":"+ tim2.trim()+ ", je uspješno ažurirana.\n"); } } // tabela sa bodovima... public void Tabela() throws Exception { File file = new File("Tabela.txt"); BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file))); ArrayList<String> lines = new ArrayList<String>(10); String line; while((line = reader.readLine()) != null) { lines.add(line); } String[] sorted = lines.toArray(new String[lines.size()]); sortRawTeamData(sorted, true); for(int i = 0; i < sorted.length; i++) { System.out.println(sorted[i]); } } private void sortRawTeamData(String[] strings, final boolean ascending) { Arrays.sort(strings, new Comparator<String>() { public int compare(String line1, String line2) { String seg1 = line1.substring(line1.lastIndexOf(':') + 1).trim(); String seg2 = line2.substring(line2.lastIndexOf(':') + 1).trim(); double p1 = Double.parseDouble(seg1); double p2 = Double.parseDouble(seg2); return (int)((p1 - p2) * (ascending? 1:-1)); } }); } } |
Autoru: | mehom [ 10 Mar 2010, 15:05 ] |
Tema posta: | Re: Java sortiranje |
Meni javlja slijedecu poruku, cak i kad kreiram novi projekt i zalijepim tvoj kod: Exception in thread "main" java.lang.NumberFormatException: For input string: "" at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224) at java.lang.Double.parseDouble(Double.java:510) at Sort$1.compare(Sort.java:33) at Sort$1.compare(Sort.java:29) at java.util.Arrays.mergeSort(Arrays.java:1270) at java.util.Arrays.mergeSort(Arrays.java:1281) at java.util.Arrays.sort(Arrays.java:1210) at Sort.sortRawTeamData(Sort.java:29) at Sort.main(Sort.java:21) Java Result: 1 |
Autoru: | Hristov [ 10 Mar 2010, 15:06 ] |
Tema posta: | Re: Java sortiranje |
Izgleda da format fajla nije u redu. Svaki red se mora zavrsavati sa dvotackom, iza koje slijedi decimalni broj. Kod tebe izgleda iza zadnje dvotacke u barem jednom redu nema nikakvog broja bodova. Uradi slijedece: u metodi sortRawTeamData napravi petlju na variabli strings i izbaci sve vrijednosti i vidjeces koji red nema dvotacku i broj bodova. Ili pogledaj u fajlu sta ne stima. |
Autoru: | mehom [ 16 Mar 2010, 07:50 ] |
Tema posta: | Re: Java sortiranje |
Kao sto rekoh ko zna zna, bio je jedan prazan red u fajlu. Sada sve radi kako treba. Hvala ti jos jednom na pomoci. LP |
Autoru: | Hristov [ 17 Mar 2010, 15:58 ] |
Tema posta: | Re: Java sortiranje |
Nema na cemu, i drugi put! |
Stranica 1 od 1 | Sva vremena su u UTC [ DST ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |