annakihlia Δημοσ. 13 Δεκεμβρίου 2009 Δημοσ. 13 Δεκεμβρίου 2009 Παιδια καλήσπερα.Ειμαι καινουργια στον προγραμματισμο και θα ηθελα τη βοηθεια σας.Σε μια κλαση θελω να δημιουργησω ενα αρχειο που να εχει ορισμενα χαρακτηριστικα(μεσω μιας μεθοδου), και μετα να αναγνωσω αυτα τα δεδομενα σε πινακες απο αλλη μεθοσο της ιδιας κλασης.Συγκεκριμενα η εκφωνηση ειναι ως εξης: Να γραφεί μια κλάση με όνομα (Havaiki) και δημόσιο προσδιοριστή.Η κλάση Havaiki πρέπει να περιέχει δύο στατικές μεθόδους m_avowal και m_spathilla .Η πρώτη μέθοδος m_avowal θα πρέπει να δέχεται ως όρισμα μια συμβολοσειρά (String). Η συμβολοσειρά αυτή θα περιέχει το όνομα του αρχείου που πρέπει να δημιουργηθεί. Το αρχείο αυτό θα πρέπει να έχει τα εξής χαρακτηριστικά: - Μέγεθος: 1900 bytes - Λίστα επιτρεπόμενων bytes: byte[] a_femineity = {97, 98, 99, 100, 101, 102, 103, 104, 105, 49, 45, 50, 51, 52}. Η λίστα των επιτρεπόμενων bytes θα πρέπει να οριστεί ως στατικό δημόσιο χαρακτηριστικό της κλάσης Havaiki με όνομα a_femineity. Τα δεδομένα του αρχείου πρέπει να είναι τυχαία και να ακολουθούν ομοιόμορφη κατανομή. (Όλα τα bytes να έχουν περίπου τον ίδιο αριθμό εμφάνισης). Η μέθοδος m_avowal θα πρέπει να επιστρέφει μια μεταβλητή τύπου long που θα περιέχει το άθροισμα των τιμών των 572 πρώτων bytes. Η μέθοδος m_spathilla θα πρέπει να δέχεται ώς όρισμα μία συμβολοσειρά (String) η οποία θα περιέχει το όνομα ενός αρχείου.Το αρχείο θα διαβάζεται στην μνήμη και θα καταγράφονται για αυτό οι παρακάτω μετρικές: - Μέγεθος - Αριθμός εμφανίσεων για κάθε byte που περιλαμβάνεται στον πίνακα που ορίστηκε στον πίνακα a_femineity. Τα δεδομένα θα πρέπει να επιστρέφονται ως πίνακας από ακεραίους (int) από την m_spathilla. Ο πίνακας αυτός στην θέση 1 (π.χ. a[0]) θα έχει το μεγεθος του αρχείου και στις υπόλοιπες των αριθμό εμφανίσεων για κάθε byte (π.χ. στην θέση 2 τον αριθμό εμφανήσεων του πρώτου byte κ.ο.κ) Εχω κανει το πρωτο σκελος αλλα δε μπορω με τιποτα να κανω το δευτερο.Εχω μπερδευτει.Η οποια βοηθεια ειναι ευπροσδεκτη.Ευχαριστω.
annakihlia Δημοσ. 14 Δεκεμβρίου 2009 Μέλος Δημοσ. 14 Δεκεμβρίου 2009 αν μπορεις εξηγησε μου πως θα κανω τη δευτερη μεθοδο,η πρωτη ειναι ετοιμη.Η εργασια πρεπει να παραδωθει σημερα,και δεν εχω χρονο να σου γραψω τωρα το πρωτο,επειδη ειμαι σε αλλο υπολογιστη.Περιμενω απαντηση σου...Ευχαριστω εκ των προτερων...
Lucky Luke Δημοσ. 14 Δεκεμβρίου 2009 Δημοσ. 14 Δεκεμβρίου 2009 Θα έχεις ένα νέο πίνακα (ας τον πούμε array) ο οποίος θα έχει μέγεθος a_femineity.length + 1 θέσεις (η μία εξτρά θέση είναι για το μέγεθος του αρχείου). Αυτός ο πίνακας στην ουσία διαθέτει μετρητές για κάθε μία από τις μετρικές που θες (bytes αρχείου και μία θέση ανά επιτρεπτό byte όπως αυτά ορίζονται στη λίστα). Αφού θα διαβάζεις byte-byte το αρχείο θα αυξάνεις ανάλογα και τον αντίστοιχο μετρητή. Π.χ. διάβασες ένα byte --> αυξάνεις κατά 1 το περιεχόμενο του array[0]. Επιπλέον έστω ότι το συγκεκριμένο byte είναι το 98 --> αυξάνεις κατά 1 το περιεχόμενο του array[2]. Δηλαδή σε κάθε ανάγνωση byte αυξάνεις πάντα 2 μετρητές-θέσεις του πίνακα array. Η μέθοδος m_spathilla() το μόνο που κάνει είναι να "γεμίσει" αυτόν τον array (διαβάζοντας το αρχείο) και να τον επιστρέψει (τουλάχιστον έτσι το καταλαβαίνω).
annakihlia Δημοσ. 14 Δεκεμβρίου 2009 Μέλος Δημοσ. 14 Δεκεμβρίου 2009 μηπως θα μπορουσες λιγο να μου πεις πως γινεται αυτο?να μου γραψεις λιγο την αρχη...
Lucky Luke Δημοσ. 14 Δεκεμβρίου 2009 Δημοσ. 14 Δεκεμβρίου 2009 Νομίζω το εξήγησα αρκετά αναλυτικά. Από εκεί και πέρα χρειάζεται και λίγο δικιά σου "τριβή" με το πρόβλημα. Πού ακριβώς κολλάς; Αν είναι για το κομμάτι για το διάβασμα κατά byte είναι κάτι αντίστοιχο με αυτό που έχεις κάνει στην πρώτη μέθοδο (αντί για γράψιμο τώρα κάνεις διάβασμα). Δε θυμάμαι ακριβώς να σου πω πώς γίνεται, θα πρέπει να κάτσω να το διαβάσω κι εγώ. Βρήκα κάτι μετά από ψάξιμο στο google. Για κοίτα εδώ μήπως σε βοηθήσει.
virxen75 Δημοσ. 14 Δεκεμβρίου 2009 Δημοσ. 14 Δεκεμβρίου 2009 βιαστικά επειδή είμαι στην δουλειά πρέπει να είναι αυτό > import java.util.Random; import java.io.*; public class Havaiki{ public static int fileSize=1900; public static byte[] a_femineity = {97, 98, 99, 100, 101, 102, 103, 104, 105,49, 45, 50, 51, 52}; public Havaiki(){ } static long m_avowal(String filename){ Random random=new Random(); try { File file1=new File(filename); boolean success = file1.createNewFile(); if (!success){ file1.delete(); file1.createNewFile(); } } catch (IOException e) { } long sumFirst572=0; try { BufferedWriter out = new BufferedWriter(new FileWriter(filename)); for (int i=0;i<fileSize;i++){ byte a=a_femineity[random.nextInt(a_femineity.length)]; if (i<572) sumFirst572+=a; out.write(a); } out.close(); } catch (IOException e) { } return sumFirst572; } static int[]m_spathilla(String filename){ int[]pinakas=new int[a_femineity.length+1]; int length=0; byte[] bytes=null; try { File file1=new File(filename); InputStream is = new FileInputStream(file1); length = (int) file1.length(); bytes = new byte[(int)length]; // Read in the bytes int offset = 0; int numRead = 0; while (offset < bytes.length && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) { offset += numRead; } // Ensure all the bytes have been read in if (offset < bytes.length) { throw new IOException("Could not completely read file "+file1.getName()); } is.close(); } catch (IOException e) { } pinakas[0]=length; for (int j=0;j<a_femineity.length;j++){ pinakas[j+1]=0; } for (int i=0;i<bytes.length;i++){ for (int j=0;j<a_femineity.length;j++){ if (bytes[i]==a_femineity[j]) pinakas[j+1]++; } } return pinakas; } public static void main(String args[]){ Havaiki jj=new Havaiki(); long a=jj.m_avowal("ofi.txt"); System.out.println(a); int f[]=jj.m_spathilla("ofi.txt"); for (int i=0;i<f.length;i++){ System.out.println(f[i]); } } }
annakihlia Δημοσ. 14 Δεκεμβρίου 2009 Μέλος Δημοσ. 14 Δεκεμβρίου 2009 Και μονο που ασχοληθηκες,σε ευχαριστω τοοοσο πολυυυ!!!!Στο compile μου βγαινει σωστο,αλλα μου λεει πως δεν εχουν οριστει κατάλληλα οι ζητουμενες μεθοδοι.Ξερεις γιατι?
virxen75 Δημοσ. 14 Δεκεμβρίου 2009 Δημοσ. 14 Δεκεμβρίου 2009 Και μονο που ασχοληθηκες,σε ευχαριστω τοοοσο πολυυυ!!!!Στο compile μου βγαινει σωστο,αλλα μου λεει πως δεν εχουν οριστει κατάλληλα οι ζητουμενες μεθοδοι.Ξερεις γιατι? ποιος το λέει?
annakihlia Δημοσ. 14 Δεκεμβρίου 2009 Μέλος Δημοσ. 14 Δεκεμβρίου 2009 Τις εργασιες τις παραδιδουμε ηλεκτρονικα και με καποιον τροπο μας απανταει το dos αν εχουμε καποια λαθη.Τεσπα,εχω βρει το προβλημα,μπορεις μηπως να αφαιρεσεις τη main και να βαλεις τα περιεχομενα της στην αλλη κλαση?Πρεπει να το κανουμε χωρις τη main.
virxen75 Δημοσ. 14 Δεκεμβρίου 2009 Δημοσ. 14 Δεκεμβρίου 2009 κάτι τέτοιο εννοείς? > import java.util.Random; import java.io.*; public class Havaiki{ public static int fileSize=1900; public static byte[] a_femineity = {97, 98, 99, 100, 101, 102, 103, 104, 105,49, 45, 50, 51, 52}; static long m_avowal(String filename){ Random random=new Random(); try { File file1=new File(filename); boolean success = file1.createNewFile(); if (!success){ file1.delete(); file1.createNewFile(); } } catch (IOException e) { } long sumFirst572=0; try { BufferedWriter out = new BufferedWriter(new FileWriter(filename)); for (int i=0;i<fileSize;i++){ byte a=a_femineity[random.nextInt(a_femineity.length)]; if (i<572) sumFirst572+=a; out.write(a); } out.close(); } catch (IOException e) { } return sumFirst572; } static int[]m_spathilla(String filename){ int[]pinakas=new int[a_femineity.length+1]; int length=0; byte[] bytes=null; try { File file1=new File(filename); InputStream is = new FileInputStream(file1); length = (int) file1.length(); bytes = new byte[(int)length]; // Read in the bytes int offset = 0; int numRead = 0; while (offset < bytes.length && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) { offset += numRead; } // Ensure all the bytes have been read in if (offset < bytes.length) { throw new IOException("Could not completely read file "+file1.getName()); } is.close(); } catch (IOException e) { } pinakas[0]=length; for (int j=0;j<a_femineity.length;j++){ pinakas[j+1]=0; } for (int i=0;i<bytes.length;i++){ for (int j=0;j<a_femineity.length;j++){ if (bytes[i]==a_femineity[j]) pinakas[j+1]++; } } return pinakas; } } > public class TryHavaiki{ public static void main(String args[]){ Havaiki jj=new Havaiki(); long a=jj.m_avowal("ofi.txt"); System.out.println("sum of the first 152 bytes="+a); int f[]=jj.m_spathilla("ofi.txt"); System.out.println("filesize="+f[0]); System.out.println("bytes and occurrences"); for (int i=1;i<f.length;i++){ System.out.println("byte="+jj.a_femineity[i-1]+" was found "+f[i]+" times"); } } }
annakihlia Δημοσ. 14 Δεκεμβρίου 2009 Μέλος Δημοσ. 14 Δεκεμβρίου 2009 Οχι,σε ενα αρχειο,χωρις την TryHavaiki.Δεν ξερω Ευχαριστω πολυ παντως!
virxen75 Δημοσ. 14 Δεκεμβρίου 2009 Δημοσ. 14 Δεκεμβρίου 2009 η TryHavaiki είναι άλλη κλάση σε άλλο αρχείο και δείχνει πως χειρίζεσαι την ζητούμενη κλάση. αν δεν στο ζητάει μην την στείλεις απλά.
annakihlia Δημοσ. 14 Δεκεμβρίου 2009 Μέλος Δημοσ. 14 Δεκεμβρίου 2009 Ναι αλλα και παλι δυστυχως,μου γραφει το ιδιο πραγμα,πως δεν εχουν οριστει καταλληλα οι ζητουμενες μεθοδοι...Δε ξερω γιατι...Το προγραμμα σου ειναι μια χαρα...Δε φταιει αυτο.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.