Evangeli Δημοσ. 18 Ιουλίου 2009 Δημοσ. 18 Ιουλίου 2009 Γνωρίζει κανείς αν μπορούμε να δημιουργήσουμε στην Java πίνακα με δυο στήλες εκ των οποίων η πρώτη θα περιέχει χαρακτήρες ενώ η δεύτερη ακεραίους? Βαγγέλης.
Επισκέπτης Δημοσ. 18 Ιουλίου 2009 Δημοσ. 18 Ιουλίου 2009 Βαγγέλης ή Evangeli ρε φίλος;;; όπως και να έχει, μάλλον θες Hashtable
Evangeli Δημοσ. 18 Ιουλίου 2009 Μέλος Δημοσ. 18 Ιουλίου 2009 Βαγγέλης ή Evangeli ρε φίλος;;;όπως και να έχει, μάλλον θες Hashtable Οχι δεν θέλω Hashteble. Με πίνακα γνωρίζεις?
Cue Δημοσ. 18 Ιουλίου 2009 Δημοσ. 18 Ιουλίου 2009 Η απλή απάντηση είναι ότι δεν μπορείς. Ο πίνακας (array) πρέπει να έχει ιδίου τύπου* αντικείμενα. *Hint: extends/implements
virxen75 Δημοσ. 19 Ιουλίου 2009 Δημοσ. 19 Ιουλίου 2009 μάλλον ψάχνεις αυτό > public class ArrayExample { private Object[][] myArray; public ArrayExample(){ myArray=new Object[5][2]; for (int i=0;i<5;i++){ myArray[i][0]=new String(""); myArray[i][1]=new Integer(0); } myArray[1][0]="fdgfdgdfg"; myArray[1][1]=10; System.out.println("\n my array value for row 1="+myArray[1][0]+","+myArray[1][1]); System.out.println("\n praxeis(myArray[1][1]*2)="+((Integer)myArray[1][1]).intValue()*2); } public static void main(String[] args) { new ArrayExample(); } }
-nick- Δημοσ. 19 Ιουλίου 2009 Δημοσ. 19 Ιουλίου 2009 Αλλιώς το υλοποιείς ,αντι για 2D Πινακα (που στην ουσία είναι πίνακας που έχει ως στοιχεία πίνακα) με ArrayList που έχει ως στοιχεία ArrayList.
Evangeli Δημοσ. 19 Ιουλίου 2009 Μέλος Δημοσ. 19 Ιουλίου 2009 μάλλον ψάχνεις αυτό > public class ArrayExample { private Object[][] myArray; public ArrayExample(){ myArray=new Object[5][2]; for (int i=0;i<5;i++){ myArray[i][0]=new String(""); myArray[i][1]=new Integer(0); } myArray[1][0]="fdgfdgdfg"; myArray[1][1]=10; System.out.println("\n my array value for row 1="+myArray[1][0]+","+myArray[1][1]); System.out.println("\n praxeis(myArray[1][1]*2)="+((Integer)myArray[1][1]).intValue()*2); } public static void main(String[] args) { new ArrayExample(); } } Αυτή η λύση μου αρέσει αλλα παρατηρώ οτι δεν μπορούμε να κάνουμε πράξεις με τα στοιχεία του πίνακα! π.χ. το myArray[0][1]++ δεν επιτρέπεται! Τι μπορώ να κάνω?
Evgenios1 Δημοσ. 19 Ιουλίου 2009 Δημοσ. 19 Ιουλίου 2009 cast Προσοχή: Από 1.1.2008, μηνύματα γραμμένα σε greeklish θα διαγράφονται. Παρακαλούμε χρησιμοποιήστε ελληνικούς χαρακτήρες στα μηνύματα σας.
virxen75 Δημοσ. 19 Ιουλίου 2009 Δημοσ. 19 Ιουλίου 2009 Αυτή η λύση μου αρέσει αλλα παρατηρώ οτι δεν μπορούμε να κάνουμε πράξεις με τα στοιχεία του πίνακα! π.χ. το myArray[0][1]++ δεν επιτρέπεται! Τι μπορώ να κάνω? > myArray[1][1]=((Integer)myArray[1][1]).intValue()+1;//myArray[1][1]++; το είχα και στον αρχικό κώδικα αλλά μάλλον δεν το πρόσεξες > System.out.println("\n praxeis(myArray[1][1]*2)="+((Integer)myArray[1][1]).intValue()*2);//myArray[1][1]*2; }
Cue Δημοσ. 19 Ιουλίου 2009 Δημοσ. 19 Ιουλίου 2009 Δεν θα χρησιμοποιούσα τον παραπάνω τρόπο για τους εξής λόγους. Δεν είναι type safe. Είναι πολύ εύκολο να βάλεις ένα οποιοδήποτε αντικείμενο στο συγκεκριμένο array με αποτέλεσμα να μην γνωρίζεις τλκ τι αντικείμενα έχεις. Χρειάζεται cast κάθε φορά που πρέπει να χρησιμοποιήσεις ένα αντικείμενο στο array με αποτέλεσμα ο κώδικάς σου να γίνεται ποιο φλύαρος. Το σημαντικότερο όμως είναι ότι δεν είναι typesafe τα arrays (see above) άρα και επιρρεπής σε ClassCastException. Αν θες να χρησιμοποιήσεις array ντε και καλά, φτιάξε ένα Interface που να προσδιορίζει τα κοινά των αντικειμένων που θες να αποθηκεύσεις. π.χ. > public interface Foo{ //methods } Foo[][] foos = // Καλύτερα όμως να αποφεύγεις τα arrays και να χρησιμοποιείς generics Αν μας έλεγες περισσότερα για το πρόβλημα που πας να λύσεις, πιθανότατα να μπορούσαμε να σου δώσουμε και μία καλύτερη λύση.
virxen75 Δημοσ. 19 Ιουλίου 2009 Δημοσ. 19 Ιουλίου 2009 Δεν θα χρησιμοποιούσα τον παραπάνω τρόπο για τους εξής λόγους. Δεν είναι type safe. Είναι πολύ εύκολο να βάλεις ένα οποιοδήποτε αντικείμενο στο συγκεκριμένο array με αποτέλεσμα να μην γνωρίζεις τλκ τι αντικείμενα έχεις. Χρειάζεται cast κάθε φορά που πρέπει να χρησιμοποιήσεις ένα αντικείμενο στο array με αποτέλεσμα ο κώδικάς σου να γίνεται ποιο φλύαρος. Το σημαντικότερο όμως είναι ότι δεν είναι typesafe τα arrays (see above) άρα και επιρρεπής σε ClassCastException. θα συμφωνήσω και εγώ και για να δώσω στον Evangeli να το καταλάβει άλλαξε στον κώδικα που έστειλα το > myArray[1][1]="10";//αντί myArray[1][1]=10;
Evangeli Δημοσ. 20 Ιουλίου 2009 Μέλος Δημοσ. 20 Ιουλίου 2009 Παιδιά σας ευχαριστώ για τις συμβουλές σας. Τελικά χρησιμοποίησα την «μη ενδεδειγμένη» λύση καθώς μου είναι κατανοητή και δουλεύει για το πρόβλημά μου. Βαγγέλης.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.