Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα παιδιά,

 

Θα ήθελα τη βοήθειά σας σαν αρχάριος σε Java.

Θέλω να φτιάξω ένα constructor ο οποίος με μπερδεύει.

Θα πρέπει να αποθηκεύονται πχ δεδομένα ενός αντικειμένου,τα οποία είναι

τύπου int και string.

 

Για παράδειγμα,κλάση "παραγγελία" και πεδία "Είδος","ποσότητα","Ποσό πληρωμής"

 

Θα χρειαστώ ένα constructor τύπου array ή κάτι άλλο;

Δημοσ.

Δες παρακάτω:

 

>
package com.test;

public class Paraggelia {
   
   private String eidos;
   private int price;
   private int posotita;

  //κατασκευαστής
   public Paraggelia(String eidos, int price, int posotita) {
       this.eidos = eidos;
       this.price = price;
       this.posotita = posotita;
   }
   
   public String getEidos() {
       return eidos;
   }

   public void setEidos(String eidos) {
       this.eidos = eidos;
   }

   public int getPrice() {
       return price;
   }

   public void setPrice(int price) {
       this.price = price;
   }

   public int getPosotita() {
       return posotita;
   }

   public void setPosotita(int posotita) {
       this.posotita = posotita;
   }
}

Δημοσ.

Κατ΄αρχήν σε ευχαριστώ για την απάντηση.

 

Ωραία,φτιάξαμε τους δημιουργούς με τα πεδία.

 

Το πρόβλημα που αντιμετωπίζω είναι ότι θέλω τα αντικείμενα να αποθηκεύονται

και να είναι προσπελάσιμα με μία for για παράδειγμα,γιστί θα θέλω να βρω για παράδειγμα το μεγαλύτερο ποσό.

Αυτό είναι το πραγματικό πρόβλημά μου,εκεί κολλάω.

 

Πχ. (Γιώργος,σκληρός δίσκος,1,100e)---(όνομα,προιόν,ποσότητα,ποσό)

 

Εκεί πώς θα σκεφτώ;

Δημοσ.

Δημιουργώντας έναν πίνακα κλάσεων Paraggelia()

 

Paraggelia[] ListaParaggelion = new Paraggelia[100];

 

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

Δημοσ.

Ένας απλοϊκός τρόπος θα ήταν να το κάνεις όπως σου λέει ο xlomo, στην πραγματικότητα όμως θα χρησιμοποιούσες collections.

 

http://www.tutorialspoint.com/java/java_collections.htm

 

http://download.oracle.com/javase/tutorial/collections/intro/index.html

 

Δεν είναι εύκολο θέμα αλλά αν ασχοληθείς με οτιδήποτε άλλο εκτός από hello world θα τα χρειαστείς

Δημοσ.

Μία ερώτηση ακόμη παιδιά:

 

Όλα καλά,φτιάξαμε μία κλάση και δημιουργό και ένα πίνακα με αντικείμενα.

Πώς μπορούμε να χρησιμοποιήσουμε τώρα αυτό τον πίνακα;

Πχ. αν έχω ένα πεδίο price και θέλω να βρω το μέγιστο,αυτό φτάνει;

 

 

Ρωτάω γιατί τρέχω στην κλάση Paraggelies το παρακάτω:

 

public void calculateHighestPrice()

{

 

for(int a=0;a<3;a++){

 

pmax=pinakas[a].price;

 

if(pinakas[a].price>pmax){

 

pmax=pinakas[a].price;

}

}

 

 

 

}

 

public float getHighestPrice()

{

calculateHighestPrice();

return pmax;

 

 

..και στη main

 

System.out.print( getHighestPrice());

 

Αλλά πετάει 0...

 

 

Τι κάνω λάθος;

Δημοσ.

Αρχικά ο τρόπος που προσπαθείς να υπολογίσεις την max τιμή δεν είναι σωστός, γιατί σε κάθε επανάληψη το pmax θα παίρνει την τιμή που διαβάζεις στον πίνακα (άρα το if θα σου βγαίνει false). Θα πρέπει να το κάνεις ως εξής:

>public int getMax() {
       int max = 0;
       
       for (int i:table) {
           if (i > max) {
               max = i;
           }
       }
       return max;
}

 

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

Δημοσ.

Ουπς,αυτό δεν το πρόσεξα αλλά δεν είναι αυτό μάλλον...

 

Τώρα μου πετάει ότι θέλει αντικείμενο για τη μέθοδο GetMax.

 

Εκεί τι θα μπει;

Δημοσ. (επεξεργασμένο)

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

Επεξ/σία από nexuss
Δημοσ.

Σε ευχαριστώ για τη βοήθεια...

 

Ναι θα ήθελα να μου εξηγήσεις το εξής:

 

Σύμφωνα με τη θεωρία,θα πρέπει να έχουμε το αντικείμενο στο οποίο αναφέρεται η μέθοδος.

Πχ αν έχουμε κλάση Σκύλος με αντικείμενο Jack και μία μέθοδο SayName() η οποία επιστρέφει το όνομα του Σκύλου,

Ο τρόπος για να το κάνουμε είναι Jack.SayName(),σωστά;

 

Στην περίπτωση μου αυτό συμβαίνει,ζητά μπροστά από τη μέθοδο το αντικείμενο,αλλά τι να βάλω;

Τον πίνακα;την κλάση;Τι;

Δημοσ.

Χμμμ..... Κάτι μου λέει ότι δεν έχεις κατανοήσει πλήρως το πώς δουλεύει ο αντικειμενοστραφής προγραμματισμός. Για να καλέσεις τις μεθόδους μιας κλάσης, θα πρέπει να έχεις ένα αντικείμενο της κλάσης αυτής. Για παράδειγμα, έχεις την κλάση Paraggelies και σε αυτήν έχεις τη μέθοδο getHighestPrice(). Για να την καλέσεις αυτή τη μέθοδο θα πρέπει να δημιουργήσεις ένα "στιγμιότυπο" par της κλάσης αυτής

Paraggelies par = new Paraggelies()

 

με το par θα μπορέσεις να καλέσεις τη μέθοδο που θέλεις, par.getHighestPrice(). Αν η μέθοδος είναι static, τότε μπορείς να την καλείς χωρίς να δημιουργείς αντικείμενο της κλάσης αυτής. Δηλαδή αν στην κλάση Paraggelies είχες μια στατική μέθοδο, πχ public static void staticMethod(), θα μπορούσες να την καλέσεις ως εξής: Paraggelies.staticMethod().

Δημοσ.

Χμμμ..... Κάτι μου λέει ότι δεν έχεις κατανοήσει πλήρως το πώς δουλεύει ο αντικειμενοστραφής προγραμματισμός. Για να καλέσεις τις μεθόδους μιας κλάσης, θα πρέπει να έχεις ένα αντικείμενο της κλάσης αυτής. Για παράδειγμα, έχεις την κλάση Paraggelies και σε αυτήν έχεις τη μέθοδο getHighestPrice(). Για να την καλέσεις αυτή τη μέθοδο θα πρέπει να δημιουργήσεις ένα "στιγμιότυπο" par της κλάσης αυτής

Paraggelies par = new Paraggelies()

 

με το par θα μπορέσεις να καλέσεις τη μέθοδο που θέλεις, par.getHighestPrice().

 

Και αν έχουμε ένα array με αντικείμενα τι κάνουμε;Πώς την καλούμε τη μέθοδο;

Να την κάνουμε static υποθέτω;

Αυτό είναι που με παιδεύει... :fear:

Δημοσ.

Το ίδιο ισχύει και όταν έχεις πίνακα με αντικείμενα. Έστω ότι θέλεις να φτιάξεις ένα πίνακα 2 στοιχείων, ο οποίος θα περιέχει αντικείμενα της κλάσης Paraggelies. Άρα θα έχεις:

Paraggelies[] parArray = new Paraggelies[2];

Για να προσθέσεις στοιχεία στον πίνακα, θα πρέπει να δημιουργήσεις νέα "στιγμιότυπα" της κλάσης Paraggelies, πχ parArray[0] = new Paraggelies();

Άρα η θέση 0 του πίνακα περιέχει μια αναφορά σε ένα αντικείμενο Paraggelies. Οπότε αν θέλεις να καλέσεις μια μέθοδο αυτού του αντικειμένου, το κάνεις με τον κλασικό τρόπο:

parArray[0].getHighestPrice(). Αν η μέθοδός σου είναι στατική, δεν χρειάζεται να δημιουργήσεις καμία αναφορά.

 

Αν σε δυσκολεύουν τα παραπάνω, προτείνω να διαβάσεις παραπάνω για το πώς λειτουργούν τα αντικείμενα και οι κλάσεις. Κοίταξε και το tutorial της java αν δεν το έχεις ήδη κάνει http://download.oracle.com/javase/tutorial/reallybigindex.html.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...