vagg77 Δημοσ. 3 Μαΐου 2014 Δημοσ. 3 Μαΐου 2014 (επεξεργασμένο) Καλησπερα παδια. Εχω να παραδωσω μια ασκηση σε Java στις 5/5 που μου ζηταει να υλοποιήσω ορισμενα πραγματα. Επειδη εχω κανει καθε κομματι ξεχωριστα, καθε υποκλάση έχει μια δικιά της main. Εγώ θέλω να υπάρχει μια main και ολες οι αλλες να ειναι υποκλάσεις αλλα όσο και να βάζω extends μου βγαζει σε ολες error.Μπορεί κάποιος να με βοηθήσει ? Εκφώνηση Άσκησης : Να γραφτεί ένα πρόγραμμα java, με χρήση των κλάσεων File, FileReader και FileWriter που να κάνει τα παρακάτω: 1. Εξετάζει αν το αρχείο «src.txt» υπάρχει στον τρέχοντα κατάλογο. Αν δεν υπάρχει θα πρέπει να τερματίζει την εκτέλεση του με χρήση της εξαίρεσης FileNotFoundException. 2. Αντιγράφει το περιεχόμενο του src.txt στο αρχείο dest.txt, προσθέτοντας μια κενή γραμμή μετά από κάθε γραμμή του src.txt και επιπλέον αντικαθιστά όλα τα κενά με τον χαρακτήρα @. 3. Τέλος, εμφανίζει το μέγεθος σε bytes του αρχείου src.txt και dest.txt, τόσο πριν το άνοιγμα όσο και μετά το κλείσιμο των αρχείων, καθώς και το πλήθος των κενών που αντικαταστάθηκαν με χαρακτήρες @. To προγραμμά μου : Κλάση File : import java.io.*; public class File { public static void main(String[] args){ try { FileInputStream file = new FileInputStream("src.txt"); boolean eof = false; int input=file.read(); System.out.print(input + " "); if (input==-1) eof=true; file.close(); } catch(IOException e) { System.out.println("Error -" + e.toString()); } } } Κλαση File_size_before (μετραει τα bytes των αρχειων πριν την μετατροπη) : import java.io.File; public class File_size_before { public static long getFileSize(String filename) { File file = new File(filename); if (!file.exists() || !file.isFile()) { System.out.println("File doesn\'t exist"); return -1; } return file.length(); } public static void main(String[] args) { long size = getFileSize("dest.txt"); System.out.println("dest.txt file size in bytes: " + size); size = getFileSize("src.txt"); System.out.println("src.txt file size in bytes: " + size); } } Κλαση Replace_Spaces (αντικαθιστα τα κενα με @) : import java.io.IOException;import java.io.File; import java.io.FileWriter; import java.io.FileReader; import java.io.BufferedReader; public class Replace_Spaces { public static void main(String args[]) { try { File file = new File("src.txt"); BufferedReader reader = new BufferedReader(new FileReader(file)); String line = "@", oldtext = " "; while((line = reader.readLine()) != null) { oldtext += line + "\r\n"; } reader.close(); // replace a word in a file //String newtext = oldtext.replaceAll("drink", "Love"); //To replace a line in a file String newtext = oldtext.replaceAll(" ", "@"); FileWriter writer = new FileWriter("dest.txt"); writer.write(newtext); writer.close(); } catch (IOException ioe) { ioe.printStackTrace(); } } } Κλάση At_Count (μετραει τα @) : import java.io.File; import java.util.Scanner; import java.io.FileNotFoundException; import java.io.*; public class At_Count { public static void main(String[] args) throws FileNotFoundException { Scanner text = new Scanner (new File("src.txt")); String word = null; int count = 0; int lines=0; int j = 0; while(text.hasNextLine()) { word = text.nextLine(); for (int i = 0; i < word.length(); i++) { if (word.charAt(i) == '@') { count++; } } lines++; } text = new Scanner (new File("dest.txt")); String[] Pinakas = new String[lines]; while(text.hasNextLine()) { word = text.nextLine(); Pinakas[j] = word; j++; } System.out.println("@ = " +count); } } Κλαση Blank_line (προσθετει μια κενη γραμμή) : import java.io.*; import java.util.*; class Blank_Line { public static void main(String[] args) { try { String text = "Your sample content to save in a text file."; BufferedWriter out = new BufferedWriter(new FileWriter("dest.txt")); out.write(text); out.write("\r\n"); out.close(); } catch (IOException e) { System.out.println("Exception "); } } } Χρειαζομαι βοηθεια να τα κατασκευάσω έτσι ώστε να έχω μονο μια main, κατι που δεν καταφερα να κανω. Επεξ/σία 3 Μαΐου 2014 από vagg77
ZAKKWYLDE Δημοσ. 3 Μαΐου 2014 Δημοσ. 3 Μαΐου 2014 Αν και η δομή σου είναι αρκετά κακή (κατανοητό μιας και είσαι αρχάριος) Με βάση την τελευταία σου γραμμή υποθέτω ότι οι κλάσεις σου δουλεύουν σωστά ξεχωριστά(δεν έκατσα να κοιτάξω τον κώδικα. Η λύση στο πρόβλημά σου είναι απλή. Θα αντικαταστήσεις την main της κάθε κλάσης σου με: public void run() { //πρώην περιεχόμενο main } Αντίστοιχα θα φτιάξεις μια Main.class η οποία θα έχει μια main η οποία θα κάνει instantiate κάθε μία απο αυτές τις κλάσεις: public class Main { public static void main(String[] args) { File_size_before fsb = new File_size_before(); Blank_line bl = new Blank_line(); //....instantiate all classes fsb.run(); bl.run(); } } Το παραπάνω είναι ενδεικτικό της δομής που πρέπει να ακολουθήσεις. Ενδεχομένως να θέλεις να επιστρέψεις μια boolean τιμή απο κάθε run για να δεις αν θα πας στο επόμενο βήμα. Η δομή που σου δίνω είναι μπακαλίστική...αλλά θα σε βοηθήσει ενδεχομένως να φτάσεις σε μια γρήγορη λύση. Υ.Γ. Μην δίνεις ονόματα στις κλάσεις σου ίδια με γνωστές κλάσεις της Standard Library όπως File. Δες τα Java conventions για το πως πρέπει να ονοματίζεις τις κλάσεις και τις μεθόδους σου.
Luciddream Δημοσ. 3 Μαΐου 2014 Δημοσ. 3 Μαΐου 2014 εγω το έκανα λίγο μπακαλίστικα... αλλα δεν νομίζω οτι χρειάζεσαι 5 κλάσεις για κάτι τέτοιο. εκτώς και αν στο ζητάει η άσκηση όπως πάντα αν υπάρχουν τπτ λάθη διορθώστε με /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package insomnia1; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author Luciddream */ public class Insomnia1 { /** * @param args the command line arguments */ public static void main(String[] args) { try { File src = new File("src.txt"); File dest = new File("dest.txt"); FileReader a = new FileReader(src); FileWriter b = new FileWriter(dest); int i = 0; int o; int atcount = 0; System.out.println("Source File Size: " + src.length()); System.out.println("Destination File Size: " + dest.length()); while (i != -1) { i = a.read(); o = i; switch (i) { case ' ': o = '@'; atcount++; case '\n': b.append("\n\r"); default: b.append((char) o); } } a.close(); b.close(); System.out.println("Source File Size: " + src.length()); System.out.println("Destination File Size: " + dest.length()); System.out.println("Spaces replaced with @: " + atcount); } catch (FileNotFoundException ex) { System.exit(-1); } catch (IOException ex) { Logger.getLogger(Insomnia1.class.getName()).log(Level.SEVERE, null, ex); } } }
Aztec Δημοσ. 3 Μαΐου 2014 Δημοσ. 3 Μαΐου 2014 εγω το έκανα λίγο μπακαλίστικα... αλλα δεν νομίζω οτι χρειάζεσαι 5 κλάσεις για κάτι τέτοιο. εκτώς και αν στο ζητάει η άσκηση όπως πάντα αν υπάρχουν τπτ λάθη διορθώστε με /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package insomnia1; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author Luciddream */ public class Insomnia1 { /** * @param args the command line arguments */ public static void main(String[] args) { try { File src = new File("src.txt"); File dest = new File("dest.txt"); FileReader a = new FileReader(src); FileWriter b = new FileWriter(dest); int i = 0; int o; int atcount = 0; System.out.println("Source File Size: " + src.length()); System.out.println("Destination File Size: " + dest.length()); while (i != -1) { i = a.read(); o = i; switch (i) { case ' ': o = '@'; atcount++; case '\n': b.append("\n\r"); default: b.append((char) o); } } a.close(); b.close(); System.out.println("Source File Size: " + src.length()); System.out.println("Destination File Size: " + dest.length()); System.out.println("Spaces replaced with @: " + atcount); } catch (FileNotFoundException ex) { System.exit(-1); } catch (IOException ex) { Logger.getLogger(Insomnia1.class.getName()).log(Level.SEVERE, null, ex); } } } Το switch statement όπως το έχεις έχει fall through. Δηλαδή οταν βρει κενο χαρακτήρα θα τρέξει και για όλα τα επόμενα ασχετα αν ισχυει η συνθηκη. Επίσης πρέπει να προσέξεις πως φτιάχνεις την αλλαγή γραμμής ανάλογα το λειτουργικό. Δηλαδη \n και \r\n
vagg77 Δημοσ. 3 Μαΐου 2014 Μέλος Δημοσ. 3 Μαΐου 2014 @Luciddream έτρεξα τον κωδικα σου με - χωρις ορισματα και δεν μου εβγαλε τιποτα
Luciddream Δημοσ. 3 Μαΐου 2014 Δημοσ. 3 Μαΐου 2014 Το switch statement όπως το έχεις έχει fall through. Δηλαδή οταν βρει κενο χαρακτήρα θα τρέξει και για όλα τα επόμενα ασχετα αν ισχυει η συνθηκη. Επίσης πρέπει να προσέξεις πως φτιάχνεις την αλλαγή γραμμής ανάλογα το λειτουργικό. Δηλαδη \n και \r\n το 2ο λογικά ναι θέλει πείραγμα αλλα το fall through τι εννοείς? να πάει στο default θέλω μετά το κάθε case @Luciddream έτρεξα τον κωδικα σου με - χωρις ορισματα και δεν μου εβγαλε τιποτα τι ορίσματα? δεν γράφεις κάπου οτι θέλει ορίσματα... αρχείο src.txt θέλεις... και σίγουρα δεν λέω οτι ειναι ιδανικός ο κώδικας αλλα το ζητούμενο το λύνει
vagg77 Δημοσ. 3 Μαΐου 2014 Μέλος Δημοσ. 3 Μαΐου 2014 Anyway,δοκιμασα τον τροπο που μου ειπε ο ZAKKWYLDE και δουλεψε αλλα εχω 1 θεματακι. Ο κωδικας της Black_Line ΔΕΝ λειτουργει και δεν ξερω πως να τον φτιαξω. Η Blank Line διαγραφει τις αλλαγες που εκανα στο dest.txt και απλα το αντικαθιστα με το test που εδωσα ως όρισμα.Oποτε θα την σβησω. Ξερετε μηπως κανενας τροπο να αφηνω κενά σε καθε τελος της προτασης σε ενα .txt file που υπαρχει ήδη ;
Aztec Δημοσ. 3 Μαΐου 2014 Δημοσ. 3 Μαΐου 2014 το 2ο λογικά ναι θέλει πείραγμα αλλα το fall through τι εννοείς? να πάει στο default θέλω μετά το κάθε case αυτο εδώ τι περιμένεις να σου δώσει ? public static void main(String[] args) { int t1=0; int t2=0; switch (t1) { case 0: t2++; case 1: t2++; case 2: t2++; case 3: t2++; default: System.out.println(t2); } } αυτό είναι το fall through. Όταν κάποιο απο τα case ισχύσει θα τρέξουν και όλα τα υπόλοιπα απο κάτω άσχετα αν ισχύουν ή όχι. Στην περιπτωσή σου όταν θα βρει κενό θα τρέξει και ο κώδικας στο case '\n'. Άρα αν έχεις την γραμμή A B C Θα πας και θα γράψεις στο άλλο αρχείο Α(LFCR)@B(LFCR)@C(CRLF)(CRLF)
Luciddream Δημοσ. 3 Μαΐου 2014 Δημοσ. 3 Μαΐου 2014 βασικά μου φαίνεται λογικό αυτο που λές, αλλα δεν γίνεται έτσι. τρέχει όπως το θέλω για κάποιο λόγο το δικό σου παράδειγμα όμως βγάζει 4.. ίσως εχει να κάνει με την java που εχω? (Java 8) edit: μπα είχε να κάνει με την σειρα του CRLF τελικά... θα βρώ άλλο τρόπο να το κάνω οπότε fixed: /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package insomnia1; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author Luciddream */ public class Insomnia1 { /** * @param args the command line arguments */ public static void main(String[] args) { try { File src = new File("src.txt"); File dest = new File("dest.txt"); FileReader a = new FileReader(src); FileWriter b = new FileWriter(dest); int i = 0; int o; int atcount = 0; System.out.println("Source File Size: " + src.length()); System.out.println("Destination File Size: " + dest.length()); while (i != -1) { i = a.read(); o = i; if (i == ' ') { o = '@'; atcount++; } else if (i == '\n') { b.append("\n\r"); } b.append((char) o); } a.close(); b.close(); System.out.println("Source File Size: " + src.length()); System.out.println("Destination File Size: " + dest.length()); System.out.println("Spaces replaced with @: " + atcount); } catch (FileNotFoundException ex) { System.exit(-1); } catch (IOException ex) { Logger.getLogger(Insomnia1.class.getName()).log(Level.SEVERE, null, ex); } } } or /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package insomnia1; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author Luciddream */ public class Insomnia1 { /** * @param args the command line arguments */ public static void main(String[] args) { try { File src = new File("src.txt"); File dest = new File("dest.txt"); FileReader a = new FileReader(src); FileWriter b = new FileWriter(dest); int i = 0; int o; int atcount = 0; System.out.println("Source File Size: " + src.length()); System.out.println("Destination File Size: " + dest.length()); while (i != -1) { i = a.read(); o = i; switch (i) { case ' ': o = '@'; atcount++; break; case '\n': b.append("\n\r"); break; } b.append((char) o); } a.close(); b.close(); System.out.println("Source File Size: " + src.length()); System.out.println("Destination File Size: " + dest.length()); System.out.println("Spaces replaced with @: " + atcount); } catch (FileNotFoundException ex) { System.exit(-1); } catch (IOException ex) { Logger.getLogger(Insomnia1.class.getName()).log(Level.SEVERE, null, ex); } } }
ZAKKWYLDE Δημοσ. 4 Μαΐου 2014 Δημοσ. 4 Μαΐου 2014 Anyway,δοκιμασα τον τροπο που μου ειπε ο ZAKKWYLDE και δουλεψε αλλα εχω 1 θεματακι. Ο κωδικας της Black_Line ΔΕΝ λειτουργει και δεν ξερω πως να τον φτιαξω. Η Blank Line διαγραφει τις αλλαγες που εκανα στο dest.txt και απλα το αντικαθιστα με το test που εδωσα ως όρισμα.Oποτε θα την σβησω. Ξερετε μηπως κανενας τροπο να αφηνω κενά σε καθε τελος της προτασης σε ενα .txt file που υπαρχει ήδη ; Again μπακαλίστικη λύση αντικατέστησε τον BufferedWriter με PrintWriter και απλά κάνε out.println(text); αντι για out.write(text); Επίσης δεν θυμάμαι αν το new FileWriter(); έχει default append to file, δοκίμασε το new FileWriter(filename, true) για append mode αν το χρειάζεσαι.
Aztec Δημοσ. 4 Μαΐου 2014 Δημοσ. 4 Μαΐου 2014 (επεξεργασμένο) βασικά μου φαίνεται λογικό αυτο που λές, αλλα δεν γίνεται έτσι. τρέχει όπως το θέλω για κάποιο λόγο το δικό σου παράδειγμα όμως βγάζει 4.. ίσως εχει να κάνει με την java που εχω? (Java 8) edit: μπα είχε να κάνει με την σειρα του CRLF τελικά... θα βρώ άλλο τρόπο να το κάνω οπότε fixed: /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package insomnia1; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author Luciddream */ public class Insomnia1 { /** * @param args the command line arguments */ public static void main(String[] args) { try { File src = new File("src.txt"); File dest = new File("dest.txt"); FileReader a = new FileReader(src); FileWriter b = new FileWriter(dest); int i = 0; int o; int atcount = 0; System.out.println("Source File Size: " + src.length()); System.out.println("Destination File Size: " + dest.length()); while (i != -1) { i = a.read(); o = i; if (i == ' ') { o = '@'; atcount++; } else if (i == '\n') { b.append("\n\r"); } b.append((char) o); } a.close(); b.close(); System.out.println("Source File Size: " + src.length()); System.out.println("Destination File Size: " + dest.length()); System.out.println("Spaces replaced with @: " + atcount); } catch (FileNotFoundException ex) { System.exit(-1); } catch (IOException ex) { Logger.getLogger(Insomnia1.class.getName()).log(Level.SEVERE, null, ex); } } } or /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package insomnia1; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author Luciddream */ public class Insomnia1 { /** * @param args the command line arguments */ public static void main(String[] args) { try { File src = new File("src.txt"); File dest = new File("dest.txt"); FileReader a = new FileReader(src); FileWriter b = new FileWriter(dest); int i = 0; int o; int atcount = 0; System.out.println("Source File Size: " + src.length()); System.out.println("Destination File Size: " + dest.length()); while (i != -1) { i = a.read(); o = i; switch (i) { case ' ': o = '@'; atcount++; break; case '\n': b.append("\n\r"); break; } b.append((char) o); } a.close(); b.close(); System.out.println("Source File Size: " + src.length()); System.out.println("Destination File Size: " + dest.length()); System.out.println("Spaces replaced with @: " + atcount); } catch (FileNotFoundException ex) { System.exit(-1); } catch (IOException ex) { Logger.getLogger(Insomnia1.class.getName()).log(Level.SEVERE, null, ex); } } } ευτυχως γιατι νόμιζα οτι είχες τσακωθεί με το break . αν και έχει και άλλο λάθος αλλά θα σε αφήσω να το βρείς @ts έχεις την λύση σου Επεξ/σία 4 Μαΐου 2014 από Aztec
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα