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

Συζητήσεις για γλώσσες προγραμματισμού και θέματα σχετικά με προγραμματισμό.
Post Reply
User avatar
weralacroix
byte level
byte level
Posts: 61
Joined: Thu Aug 24, 2006 11:37 am

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

Post by weralacroix » Fri Jun 08, 2007 4:08 am

Ρε παιδιά έχω ένα πρόβλημα στην java που με προβληματίζει πολύ εδώ και αρκετές εργασίες και θα μου έλυνε τα χέρια σε μεγάλο βαθμο εάν γινόταν.

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

Δηλαδή εάν θες να φτιάξεις ένα πρόγραμμα που να σου ζητάει έναν αριθμό "ν" και έπειτα αυτό να δηλώνει τις μεταβλητές var1,var2,var3,....,var(v-1),var(v);Πώς το κάνεις; :?:
User avatar
AmmarkoV
Wow! Terabyte level
Wow! Terabyte level
Posts: 2838
Joined: Thu Nov 04, 2004 2:55 pm
Gender:
Location: Reloaded @ Santa Friday
Contact:

Post by AmmarkoV » Fri Jun 08, 2007 4:14 am

Ψάχνεις για Arrays! :)
Αυτό που λές μπορεί να γίνει ως εξής :
var[255] και να έχεις var[0] var[1] var [2] var[3] κτλ
Κοίτα στο google..

(Αν καταλαβαίνω σωστά τι λες.. :-) )
Spoiler: εμφάνιση/απόκρυψη
I would love to change the world, but they won't give me the source code. Οι καθηγητές πληρώνονται από το δημόσιο αρα από όλους τους Έλληνες για να κάνουν τα μαθήματα. Όλοι οι Έλληνες θα έπρεπε να μπορούν να δουν τα μαθήματα τα οποία πληρώνουν! Tο πνευματικό έργο που επιτελείται με τα χρήματα του δημοσίου ΔΕΝ είναι μόνο δικό σας Όποιος δεν δίνει πανελλήνιες έχει δικαίωμα στην γνώση που πληρώνει [url=http://ammar.gr/gddg]gddg blog[/url]
Image
User avatar
weralacroix
byte level
byte level
Posts: 61
Joined: Thu Aug 24, 2006 11:37 am

Post by weralacroix » Fri Jun 08, 2007 4:27 am

Σωστός!!!! :shock:
Δεν το είχα σκεφτεί αυτό!!! :evil:

Εάν θέλω όμως απλά να ελέγξω εάν το περιεχόμενο ενός String είναι το ίδιο με το όνομα μιας μεταβλητής;
User avatar
AmmarkoV
Wow! Terabyte level
Wow! Terabyte level
Posts: 2838
Joined: Thu Nov 04, 2004 2:55 pm
Gender:
Location: Reloaded @ Santa Friday
Contact:

Post by AmmarkoV » Fri Jun 08, 2007 4:32 am

Δεν έχει πολυ νόημα να το κάνεις αυτό αλλά αν το θες τότε μπορείς να γράψεις το όνομα της μεταβλητής 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 "); }
Spoiler: εμφάνιση/απόκρυψη
I would love to change the world, but they won't give me the source code. Οι καθηγητές πληρώνονται από το δημόσιο αρα από όλους τους Έλληνες για να κάνουν τα μαθήματα. Όλοι οι Έλληνες θα έπρεπε να μπορούν να δουν τα μαθήματα τα οποία πληρώνουν! Tο πνευματικό έργο που επιτελείται με τα χρήματα του δημοσίου ΔΕΝ είναι μόνο δικό σας Όποιος δεν δίνει πανελλήνιες έχει δικαίωμα στην γνώση που πληρώνει [url=http://ammar.gr/gddg]gddg blog[/url]
Image
User avatar
weralacroix
byte level
byte level
Posts: 61
Joined: Thu Aug 24, 2006 11:37 am

Post by weralacroix » Fri Jun 08, 2007 4:44 am

Αυτό είναι το βασικό πρόβλημά μου!:


===========================================
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)

Δεν υπάρχει κάποιος τρόπος να αποφύγω αυτή την επανάληψη περνώντας κάποιες παραμέτρους στην μέθοδο ίσως;
User avatar
tsilochr
Wow! Terabyte level
Wow! Terabyte level
Posts: 3246
Joined: Tue Mar 16, 2004 2:47 pm
Academic status: PhD
Gender:
Location: mm.aueb.gr
Contact:

Post by tsilochr » Fri Jun 08, 2007 2:44 pm

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

Το πιο πιθανό είναι οι αναφόρες προς τα items που έχεις στο madepc να είναι οι ίδιες με τις αναφορές στα vectors. Θα πρέπει να ψάξεις από το βιβλίο πως λειτουργούν τα αντικείμενα, αναφορές κλπ.
User avatar
weralacroix
byte level
byte level
Posts: 61
Joined: Thu Aug 24, 2006 11:37 am

Post by weralacroix » Fri Jun 08, 2007 4:15 pm

Ξέρω πως δουλεύουν τα αντικείμενα,αναφορες κλπ.

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

Η μέθοδος αυτή δεν είναι όπως είναι στο πρόγραμμά μου και μην την συσχετίζετε με την εργασία.Την μετέτρεψα έτσι ώστε να δείξω αυτό που ψάχνω.
User avatar
tsilochr
Wow! Terabyte level
Wow! Terabyte level
Posts: 3246
Joined: Tue Mar 16, 2004 2:47 pm
Academic status: PhD
Gender:
Location: mm.aueb.gr
Contact:

Post by tsilochr » Fri Jun 08, 2007 5:15 pm

ok, τότε έχουμε και λέμε:

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

2. Ίσως σε βοηθούσε μια δομή όπως ένα Map, hashTable κλπ
User avatar
AmmarkoV
Wow! Terabyte level
Wow! Terabyte level
Posts: 2838
Joined: Thu Nov 04, 2004 2:55 pm
Gender:
Location: Reloaded @ Santa Friday
Contact:

Post by AmmarkoV » Fri Jun 08, 2007 10:01 pm

Βασικά ο κώδικας σου παραείναι αντικειμενοστραφής :)
Θα πρέπει να ξαναοργανώσεις τα πράγματα , τουλάχιστον εγώ θα το σκεφτόμουν ώς εξής
Βασικά ουτε κάν.. Απλά η παρακάτω κατάταξη πιστεύω πως είναι πολυ λογική..

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:
Spoiler: εμφάνιση/απόκρυψη
I would love to change the world, but they won't give me the source code. Οι καθηγητές πληρώνονται από το δημόσιο αρα από όλους τους Έλληνες για να κάνουν τα μαθήματα. Όλοι οι Έλληνες θα έπρεπε να μπορούν να δουν τα μαθήματα τα οποία πληρώνουν! Tο πνευματικό έργο που επιτελείται με τα χρήματα του δημοσίου ΔΕΝ είναι μόνο δικό σας Όποιος δεν δίνει πανελλήνιες έχει δικαίωμα στην γνώση που πληρώνει [url=http://ammar.gr/gddg]gddg blog[/url]
Image
User avatar
weralacroix
byte level
byte level
Posts: 61
Joined: Thu Aug 24, 2006 11:37 am

Post by weralacroix » Fri Jun 08, 2007 10:21 pm

Ναι,αυτό σκέφτηκα και εγώ.

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

Αυτός είναι ένας πολύ καλός τρόπος.
Αλλά όπως καταλαβαίνω αυτό που ζητούσα δεν γίνεται.
Στην ουσία να μετατρέψεις ένα 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);
}
===========================================

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

Πήρα ωραίες ιδέες όμως,ευχαριστω για την βοήθεια. :)
User avatar
tsilochr
Wow! Terabyte level
Wow! Terabyte level
Posts: 3246
Joined: Tue Mar 16, 2004 2:47 pm
Academic status: PhD
Gender:
Location: mm.aueb.gr
Contact:

Post by tsilochr » Fri Jun 08, 2007 10:29 pm

αυτό γίνεται με Maps ή HashTables όπου τα strings θα είναι τα κλειδιά.
User avatar
weralacroix
byte level
byte level
Posts: 61
Joined: Thu Aug 24, 2006 11:37 am

Post by weralacroix » Fri Jun 08, 2007 10:58 pm

Δυστυχώς ακόμα δεν ξέρω τι είναι καν τα maps και τα hashtables αλλά αφού το λες θα το ψάξω. :-D
Post Reply

Return to “Προγραμματισμός”