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

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

Δημοσ.

Καλησπερα παιδια,μερικες συμβουλες θα θελα οσον αφορα τους πινακες αντικειμενων.Εχω τον παρακατω κωδικα

public class test2 
{
    private int numOfWheels;
    private int numOfDoors;
    private int yearModel;
    private String color;
    private String brand;
    private int speed;
    private int gear;
    

    public test2()
    {
        yearModel   = 0;
        numOfWheels = 0;
        numOfDoors  = 0;
    	color       = "umknown";
    	brand       = "umknown";
    	speed       = 0;
        gear        = 0;
    }



    public test2(int yearModel,int numOfWheels,int numOfDoors,
                 String color,String brand,int speed,int gear)
    	         {
    	         	this.yearModel   = yearModel;
    	         	this.numOfWheels = numOfWheels;
    	         	this.numOfDoors  = numOfDoors;
    	         	this.color       = color;
    	         	this.brand       = brand;
    	         	this.speed       = speed;
                        this.gear        = gear;
                 }     


    public void setYearModel(int yearModel)
    {
    	this.yearModel = yearModel;
    }

    public void setNumOfWhells(int numOfWheels)
    {
    	this.numOfWheels = numOfWheels;
    }

    public void setNumOfDoors(int numOfDoors)
    {
    	this.numOfDoors = numOfDoors;
    }

    public void setColor(String color)
    {
    	this.color = color;
    }

    public void setBrand(String brand)
    {
    	this.brand = brand;
    }

    public void setSpeed(int speed)
    {
    	this.speed = speed;
    }

    public void setGear(int gear)
    {
        this.gear = gear;
    }


    public int getYearModel()
    {
    	return this.yearModel;
    }

    public int getNumOfWhells()
    {
    	return this.numOfWheels;
    }

    public int getNumOfDoors()
    {
    	return this.numOfDoors;
    }

    public String getColor()
    {
    	return this.color;
    }

    public String getBrand()
    {
    	return this.brand;
    }

    public int getSpeed()
    {
    	return this.speed;
    }

    public int getGear()
    {
        return this.gear;
    }

}

Και εδω θελουμε να φτιαξουμε πινακες αντικειμενων.

import java.util.Scanner;

public class test1
{
    test2[] obj;
    private String carBrand;

    public test1()
    {
        Scanner sc = new Scanner(System.in);
        obj = new test2[3]; 

		    for(int i=0; i<obj.length; i++)
		    {
                       carBrand = sc.nextLine();
                       obj[i]   = new test2();
                       obj[i].setBrand(carBrand);
                    }
     }


     public void showObjects()
     {
         System.out.println("--------------");
         for(int i=0; i<obj.length; i++)
            {
                 System.out.println(obj[i].getBrand());
            }
     }



}     	

Και τα εμφανιζουμε

public class test
{
	public static void main(String[] args)
	{

         test1 t = new test1();
         t.showObjects();
        }

}

1)Ειναι σωστο αυτο που κανω?Μου ειπαν οτι ειναι χαζο διοτι αν ηθελες μου ειπαν κατι τετοιο εφτιαχνες εναν πινακα και τελειωνε,στεκει αυτο?

 

2)Μπορω να μην δηλωσω το μεγεθος του πινακα και να κανω το εξης?

test2[] obj;
    
    public test1()
    {
        Scanner sc = new Scanner(System.in); 

		    for(int i=0; i<obj.length; i++)
		    {
                      obj[i]   = new test2(sc.nextInt(),sc.nextInt(),sc.nextInt(),
                                           sc.nextLine(),sc.nextLine(),sc.nextInt(),
                                           sc.nextInt(),sc.nextInt());
                    }
     }
 

Αλλα εχουμε θεμα με το obj.length καθως δεν γνωριζει το length του πινακα,καμια ιδεα πως μπορει να υλοποιηθει αυτο πιο προγραμματιστικα σωστα?

Δημοσ.

Καλησπερα παιδια,μερικες συμβουλες θα θελα οσον αφορα τους πινακες αντικειμενων.Εχω τον παρακατω κωδικα

public class test2 
{
    ...
}

Μια μικρή παρατήρηση: αφού η κλάση αντιπροσωπεύει αυτοκίνητο, γιατί την λένε Test2 και όχι Car; Έχει και λιγότερα γράμματα :-)

 

 

Και εδω θελουμε να φτιαξουμε πινακες αντικειμενων.

 

...

 

1)Ειναι σωστο αυτο που κανω?Μου ειπαν οτι ειναι χαζο διοτι αν ηθελες μου ειπαν κατι τετοιο εφτιαχνες εναν πινακα και τελειωνε,στεκει αυτο?

Αν θέλεις να εξασκηθείς με πίνακες αντικειμένων, πολύ καλά το κάνεις.

 

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

 

2)Μπορω να μην δηλωσω το μεγεθος του πινακα και να κανω το εξης?

test2[] obj;
    
    public test1()
    {
        Scanner sc = new Scanner(System.in); 

		    for(int i=0; i<obj.length; i++)
		    {
                      obj[i]   = new test2(sc.nextInt(),sc.nextInt(),sc.nextInt(),
                                           sc.nextLine(),sc.nextLine(),sc.nextInt(),
                                           sc.nextInt(),sc.nextInt());
                    }
     }
 
Αλλα εχουμε θεμα με το obj.length καθως δεν γνωριζει το length του πινακα,καμια ιδεα πως μπορει να υλοποιηθει αυτο πιο προγραμματιστικα σωστα?

 

Άλλη μια μικρή παρατήρηση: εγώ θα έφτιαχνα μια μέθοδο readObjects() αντί να βάζω τόσο κώδικα στον constructor. Αλλά αυτό ίσως είναι και θέμα γούστου.

 

Στο θέμα σου: Οι απλοί πίνακες στην Java έχουν σταθερό μέγεθος που δηλώνεται στη δημιουργία τους (όπως έχεις κάνει) και δεν αλλάζει. Μετά είναι διαθέσιμο μέσω του .length. Αν όμως δεν το δηλώσεις, η Java δεν ξέρει πόσα στοιχεία θα έχει ο πίνακας. Για την ακρίβεια, ο δεύτερος κώδικας που προτείνεις δεν δημιουργεί ποτέ τον πίνακα: άλλο η δήλωση 

test2[] obj;

 και άλλο η δημιουργία 

obj = new test2[3];

Αν θέλεις να μάθεις για πίνακες που δεν χρειάζεται να δηλώσεις το μέγεθός τους στην αρχή αλλά μεγαλώνουν καθώς τους προσθέτεις στοιχεία, δες το ArrayList<>. Ενδεικτικά θα είχες (γράφω Car, δεν μπορώ!)

public class test1
{
    private ArrayList<Car> cars;   // γιατί όχι και αυτό private;

    public test1()
    {
        Scanner sc = new Scanner(System.in);

        System.out.println("How many cars?");
        int num = sc.nextInt();
        sc.nextLine();
        for (int i = 0; i < num; i++)
	{
            String carBrand = sc.nextLine();   // Γιατί το carBrand να μην είναι τοπική μεταβλητή;
            Car c = new Car();
            c.setBrand(carBrand);
            cars.add(c);
         }
     }


     public void showObjects()
     {
         System.out.println("--------------");
         for (int i = 0; i < cars.size(); i++)
         {
             System.out.println(cars.get(i).getBrand());
         }

         /* ή ακόμα καλύτερα
         for (Car c : cars)
         {
             System.out.println(c.getBrand());
         }
         */
     }
}     	
  • Like 3
Δημοσ.

Την καλησπερα μου φιλε μου κ ευχαριστω για την ανταποκριση.Αργησα λιγο ν απαντησω λογο δουλειας.Πολυ διαφωτιστικα τα οσα περιγραφεις απλα δεν εχω φτασει ακομα στα ArrayList δυστυχως.Καταλαβα παντως πανω κατω το πνευμα

 

Αυτο εδω ειναι τελικα σωστο?Δηλαδη θελω με την μια να κρατησω 5 μαρκες για τ αυτοκινητο,5 χρωματα,5 yearModel κτλ κτλ κτλ.Μπορω μ αυτον τον τροπο να το κανω καθως τον τροπο σου με τα ArrayList δεν τον εχω μαθει ακομα

  obj[i]   = new test2(sc.nextInt(),sc.nextInt(),sc.nextInt(),
                       sc.nextLine(),sc.nextLine(),sc.nextInt(),
                       sc.nextInt(),sc.nextInt());
                

 

Δημοσ.

Ναι, καλά το πας! Καταλαβαίνεις βέβαια ότι θα πρέπει να δίνεις όλα τα στοιχεία για κάθε αυτοκίνητο (έτος, ρόδες, πόρτες, κ.λπ.), μετά για το επόμενο αυτοκίνητο κ.ο.κ.  Επίσης, πιο σωστό θα ήταν να πεις ότι «κρατάω 5 αυτοκίνητα, που το καθένα έχει έτος, ρόδες, πόρτες, έτος, κ.λπ.».

 

Αλήθεια, το δοκίμασες; Θα έβλεπες ότι παίζει.

 

Αυτά για το ArrayList τα έγραψα για να σου κινήσουν το ενδιαφέρον. Το μόνο που γίνεται είναι ότι αλλάζει το «είδος» του πίνακα, και μαζί με αυτό και η σύνταξη για να τον χρησιμοποιείς (δεν υπάρχουν τα [] αλλά μέθοδοι add(), get(), set()), κατά τα άλλα θα μπορούσες να κάνεις περίπου το ίδιο και με ArrayList:

cars.add(new Car(sc.nextInt(), sc.nextInt(), ...));
Δημοσ.

 

Αλήθεια, το δοκίμασες; Θα έβλεπες ότι παίζει.

 

Ναι το δοκιμασα φιλε μου αλλα μου πεταει Error οταν παω να εισαγω το τεταρτο στοιχειο,καπου εχω κανει λαλακια αλλα θα το βρω που θα παει,ο επιμενων νικα :) Πολυ δελεαστικο ακουγεται να μπορεις να μην ορισεις μεγεθος στον πινακα και να του προσθετεις η αφαιρεις στοιχεια

 

Μια μικρή παρατήρηση: αφού η κλάση αντιπροσωπεύει αυτοκίνητο, γιατί την λένε Test2 και όχι Car; Έχει και λιγότερα γράμματα :-)

 

Εσαι κ εσυ της λεπτομερειας βλεπω ε? :-) :-)  και καλα κανεις.Απλα ειχα φτιαξει 3 κλασεις και κανω προπονηση εκει πανω,φτιαχνω κατι το σβηνω,δοκιμαζω κατ αλλο κτλ κτλ κτλ.Στην συγκεκριμενη περιπτωση εφτιαξα αυτο για να προπονηθω στην κληρονομηκοτιτα και στους πινακες αντικειμενων :-)

 

 

  Επίσης, πιο σωστό θα ήταν να πεις ότι «κρατάω 5 αυτοκίνητα, που το καθένα έχει έτος, ρόδες, πόρτες, έτος, κ.λπ.».

 

χμ..οντος ναι,θα το δοκιμασω αμεσως αυτο,ωραιος :-)

Ειχα βρει 2 ωραια βιντεακι για την περιπτωση με τους πινακες αντικειμενων αλλα ενταξει ο τυπος ακολουθει αλλο τροπο,τελειως διαφορετικο αλλα ωραιο

Link.png Site:

Link.png Site:

 

Αυτα τα ολιγα προς το παρον φιλε μου,σ ευχαριστω και παλι,την καλημερα μου :-)

Δημοσ.

Ειχα βρει 2 ωραια βιντεακι για την περιπτωση με τους πινακες αντικειμενων αλλα ενταξει ο τυπος ακολουθει αλλο τροπο,τελειως διαφορετικο αλλα ωραιο

Link.png Site:

Link.png Site:

 

 

 

διαβαζουμε και λιγο τα σχολια απο κατω, ετσι?

 

"Dude I know this is beginner stuff - but no reason to teach bad coding standards..."

Δημοσ.

Ναι το δοκιμασα φιλε μου αλλα μου πεταει Error οταν παω να εισαγω το τεταρτο στοιχειο,καπου εχω κανει λαλακια αλλα θα το βρω που θα παει,ο επιμενων νικα :)

Το πρόβλημά σου είναι το nextInt() που ακολουθείται από nextLine(). Αν δώσεις π.χ. 

3 <ENTER>

abc <ENTER>

τότε το nextInt() διαβάζει τον ακέραιο και σταματάει ακριβώς μετά. Οπότε μάντεψε τι διαβάζει το επόμενο nextLine()...

Δημοσ.

Αυτο που εχω να πω εγω, ειναι πως ειναι δυνατον η java ακομη να μην εχει ενα σοβαρο Implementation για properties περα απο αυτο της εποχης turbo pascal ξερω γω... 

Δημοσ.

 

διαβαζουμε και λιγο τα σχολια απο κατω, ετσι?

 

"Dude I know this is beginner stuff - but no reason to teach bad coding standards..."

 

Φιλε μου μεγαλο κεφαιλαιο αυτο.Σ ολα τα παρομοια tutorials που εχω μπει οι μισοι κραζουν και οι μισοι γραφουν διθυραμβους.Αλλα και σε ολα τα φορουμ προγραμματισμου που εχω μπει(τα ελληνικα) ποτε δεν ειδα καποιον να γραψει "μπραβο,ωραιος και σωστος κωδικας",ολοι ολο και κατι θα εχουν να του καταλογησουν,κατι να βρουνε λαθος,κατι να κραξουνε κτλ κτλ.Εσυ που εχεις μια Α πειρα μπορεις να κρινεις αν ειναι σωστος η μπακαλιστικος ο κωδικας,εγω και πολλοι αλλοι ειμαστε αρχαριοι και δεν μπορουμε να κρινουμε  δυστυχως με αποτελεσμα πολλες φορες να μαθαινουμε πραγματα στραβα.Τι να κανεις.....

 

Σ αυτα τα 2 βιντεακι φιλε μου δηλαδη κατα την γνωμη σου ο κωδικας και η μεθοδος που χρησιμοποιει για να φτιαξει αντικειμενα δεν ειναι σωστος?Θα το εκτιμουσα αν μου ελεγες την γνωμη σου για να μην τα μαθω στραβα,ευχαριστω

Δημοσ.

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

 

Το σωστό (που νομίζω ότι το γράφει ο ίδιος παρακάτω -- και το «σώζει») θα ήταν να χρησιμοποιήσεις έτοιμες δομές της βιβλιοθήκης, όπως το ArrayList ή άλλες.

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

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

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

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

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

Σύνδεση

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

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