Page 1 of 1

Δήλωση αριθμημένων μεταβλητών στη java?

Posted: Fri Jun 08, 2007 4:08 am
by weralacroix
Ρε παιδιά έχω ένα πρόβλημα στην java που με προβληματίζει πολύ εδώ και αρκετές εργασίες και θα μου έλυνε τα χέρια σε μεγάλο βαθμο εάν γινόταν.

Μπορείς με κάποιο τρόπο να δηλώσεις μια μεταβλητή η οποία να πάρει για όνομα το περιεχόμενο ενός String,ότι και εάν είναι αυτό την συγκεκριμένη στιγμή; :?:

Δηλαδή εάν θες να φτιάξεις ένα πρόγραμμα που να σου ζητάει έναν αριθμό "ν" και έπειτα αυτό να δηλώνει τις μεταβλητές var1,var2,var3,....,var(v-1),var(v);Πώς το κάνεις; :?:

Posted: Fri Jun 08, 2007 4:14 am
by AmmarkoV
Ψάχνεις για Arrays! :)
Αυτό που λές μπορεί να γίνει ως εξής :
var[255] και να έχεις var[0] var[1] var [2] var[3] κτλ
Κοίτα στο google..

(Αν καταλαβαίνω σωστά τι λες.. :-) )

Posted: Fri Jun 08, 2007 4:27 am
by weralacroix
Σωστός!!!! :shock:
Δεν το είχα σκεφτεί αυτό!!! :evil:

Εάν θέλω όμως απλά να ελέγξω εάν το περιεχόμενο ενός String είναι το ίδιο με το όνομα μιας μεταβλητής;

Posted: Fri Jun 08, 2007 4:32 am
by AmmarkoV
Δεν έχει πολυ νόημα να το κάνεις αυτό αλλά αν το θες τότε μπορείς να γράψεις το όνομα της μεταβλητής hardcoded σαν string δηλαδή

(Το παρακάτω είναι μια ιδέα , ψευδοκώδικας, είναι περίπου Java :-p )

String metavliti_test[15];
if Equals("metavliti_test",metavliti_test[3])
{ System.out.println("I metavliti 3 exei onoma san tin metavliti :P "); }

Posted: Fri Jun 08, 2007 4:44 am
by weralacroix
Αυτό είναι το βασικό πρόβλημά μου!:


===========================================
static void acceptpc(Vector components,Vector softwares,Vector sales,computer madepc){
int count=0;
int count2=0;
while(count<((Vector)components.get(0)).size()){
if((madepc.compmotherboard).name==((motherboard)((Vector)components.get(0)).get(count)).name){
((motherboard)((Vector)components.get(0)).get(count)).quantity--;

}
count++;
}
count=0;
while(count<((Vector)components.get(1)).size()){
if((madepc.compcpu).name==((cpu)((Vector)components.get(1)).get(count)).name){
((cpu)((Vector)components.get(1)).get(count)).quantity--;

}
count++;
}
sales.add(madepc);

}
===========================================

Αυτή η μέθοδος επαναλαμβάνει τα ίδια δύο φορές(Η κανονική τα επαναλάμβανε πολύ περισσότερες) και το μόνο που αλλάζει είναι τα
compcpu--compmotherboard(μεταβλητές της τάξης computer που είναι υποτάξη της item)
cpu---motherboard(υποτάξεις της component που είναι υποτάξη της item)

Δεν υπάρχει κάποιος τρόπος να αποφύγω αυτή την επανάληψη περνώντας κάποιες παραμέτρους στην μέθοδο ίσως;

Posted: Fri Jun 08, 2007 2:44 pm
by tsilochr
εσυ βασικά θες να μειώνεις τις ποσότητες από την αποθήκη. αυτό γίνεται απίστευτα πιο εύκολα αν είχες κατανοήσει πλήρως τον τρόπο με το οποίο δουλεύουν τα αντικείμενα, οι αναφορές τους, αντίγραφα αντικειμένων κλπ

Το πιο πιθανό είναι οι αναφόρες προς τα items που έχεις στο madepc να είναι οι ίδιες με τις αναφορές στα vectors. Θα πρέπει να ψάξεις από το βιβλίο πως λειτουργούν τα αντικείμενα, αναφορές κλπ.

Posted: Fri Jun 08, 2007 4:15 pm
by weralacroix
Ξέρω πως δουλεύουν τα αντικείμενα,αναφορες κλπ.

Το προβλημά μου δεν είναι να κάνω την εργασία ή να μειώσω τις ποσότητες από την αποθήκη,την έχω ήδη παραδώσει την εργασία.

Η μέθοδος αυτή δεν είναι όπως είναι στο πρόγραμμά μου και μην την συσχετίζετε με την εργασία.Την μετέτρεψα έτσι ώστε να δείξω αυτό που ψάχνω.

Posted: Fri Jun 08, 2007 5:15 pm
by tsilochr
ok, τότε έχουμε και λέμε:

1. Οχι, δεν μπορείς να αποφασίσεις στο όνομα μιας μεταβλητής δυναμικά στο runtime

2. Ίσως σε βοηθούσε μια δομή όπως ένα Map, hashTable κλπ

Posted: Fri Jun 08, 2007 10:01 pm
by AmmarkoV
Βασικά ο κώδικας σου παραείναι αντικειμενοστραφής :)
Θα πρέπει να ξαναοργανώσεις τα πράγματα , τουλάχιστον εγώ θα το σκεφτόμουν ώς εξής
Βασικά ουτε κάν.. Απλά η παρακάτω κατάταξη πιστεύω πως είναι πολυ λογική..

3 arrays n=255 πχ θέσεων
String product_names[255] // Τα ονόματα 255 προϊόντων
String product_types[255] // Οι τύποι των προϊόντων (Motherboard κτλ)
unsigned int product_quantity[255] // για κάθε ένα από τα παραπάνω προϊόντα το απόθεμα μας

και αν θές πχ να πάρεις ένα PC με Mobo ASUS p4p800 Deluxe (μου κάηκε btw :-p) και CPU p4 2.4Ghz

Να λές
PC.add("ASUS p4p800 Deluxe");
PC.add("P4 2.4Ghz");

sales.add(PC);

και το προγραμματάκι σου για κάθε add να ψάχνει στο product names και να μειώνει το αντίστοιχο product_quantity..
Ελπίζω να σε βοήθησα! :razz:

Posted: Fri Jun 08, 2007 10:21 pm
by weralacroix
Ναι,αυτό σκέφτηκα και εγώ.

Βασικά, η πρώτη σου απάντηση με βοήθησε να το σκεφτώ! ;) ;) ;)

Αυτός είναι ένας πολύ καλός τρόπος.
Αλλά όπως καταλαβαίνω αυτό που ζητούσα δεν γίνεται.
Στην ουσία να μετατρέψεις ένα String σε κώδικα.

και ιδανικά ο κώδικας θα γινόταν:

===========================================
static void acceptpc(Vector components,Vector softwares,Vector sales,computer madepc,String type,String comptype){
int count=0;
while(count<((Vector)components.get(0)).size()){
if((madepc.comptype).name==((type)((Vector)components.get(0)).get(count)).name){
((type)((Vector)components.get(0)).get(count)).quantity--;
}
count++;
}
sales.add(madepc);
}
===========================================

ή κάπως έτσι τέλος πάντων!!!

Πήρα ωραίες ιδέες όμως,ευχαριστω για την βοήθεια. :)

Posted: Fri Jun 08, 2007 10:29 pm
by tsilochr
αυτό γίνεται με Maps ή HashTables όπου τα strings θα είναι τα κλειδιά.

Posted: Fri Jun 08, 2007 10:58 pm
by weralacroix
Δυστυχώς ακόμα δεν ξέρω τι είναι καν τα maps και τα hashtables αλλά αφού το λες θα το ψάξω. :-D