Λύσεις java

Παρακολουθώ όλα τα μαθήματα.

Συντονιστές: markelos, Ryu, φιάλη klein, meleneemil

Άβαταρ μέλους
timos_m
Δημοσιεύσεις: 1047
Εγγραφή: Παρ Δεκ 22, 2006 9:11 pm
Real Name: ΤΜ
Gender: Male
Τοποθεσία: Εδώ

Δημοσίευση από timos_m »

Ρε συ αυτό λέει το παιδί! Ότι η λύση αυτή είναι λάθος...
Άβαταρ μέλους
skywalker
Δημοσιεύσεις: 1432
Εγγραφή: Παρ Νοέμ 03, 2006 12:03 pm
Real Name: skywalker
Facebook ID: 0
Τοποθεσία: καμμενη γη
Επικοινωνία:

Δημοσίευση από skywalker »

prepei na arxiso na diabazo kalytera ta posts :P
Θελω να φυγουν τα κομματα Εδω και Τωρα απο το ΕΜΠ...
Εικόνα Εικόνα
Άβαταρ μέλους
apolski
Δημοσιεύσεις: 846
Εγγραφή: Πέμ Ιουν 21, 2007 3:09 pm
Real Name: ---
Gender: Male
Facebook ID: 0
Τοποθεσία: UK

(JAVA)εργαστηριακη ασκηση #6

Δημοσίευση από apolski »

Παιδιά μπορεί κάποιος να μου εξηγήσει τον παρακάτω κώδικα σε java(είναι απο εργαστηριακή άσκηση #6):

int base=2;
String binary="";
int remainder; // To upoloipo ths diaireshs
long quotient; // To phliko ths diaireshs
boolean finished=false;

while (!finished){
remainder= (int) (decimal % base);
quotient=decimal/base;
binary= remainder + binary;
if (quotient==0)
finished=true;
else
decimal=quotient;
}
return binary;


Τα σημεία που δεν κατάλαβα τα έκανα bold. Συγκεκριμένα:
(int) (decimal % base);
-Δεν καταλαβαίνω τι κάνει το σύμβολο % και γιατί έχει το (int) μπροστά

remainder + binary;
-Πως γίνεται να έχουμε πρόσθεση long με sting

decimal=quotient;
-???

Ευχαριστω :oops:
Άβαταρ μέλους
O kanenas
Δημοσιεύσεις: 3246
Εγγραφή: Κυρ Νοέμ 05, 2006 3:26 pm
Real Name: Αφροξυλάνθη
Facebook ID: 0
Τοποθεσία: Within search engines that search engines that search
Επικοινωνία:

Re: (JAVA)εργαστηριακη ασκηση #6

Δημοσίευση από O kanenas »

Το decimal τι είναι? Παράμετρος της μεθόδου?
Πάντως, o τελεστής % δίνει το υπόλοιπο της διαίρεσης. Οπότε, εδώ στην γραμμή

Κώδικας: Επιλογή όλων

remainder= (int) (decimal % base);
υπολογίζεται το υπόλοιπο της διαίρεσης decimal/base, κάνει casting* σε int και καταχωρεί το αποτέλεσμα στην μεταβλητή remainder.

Για το

Κώδικας: Επιλογή όλων

if (quotient==0)
finished=true;
else
decimal=quotient;
Σου λέει ότι αν το ακέραιο μέρος της διαίρεσης decimal/base είναι 0, τότε η διαδικασία έχει τελειώσει και πρέπει να σταματήσει ο βρόχος (γι'αυτό finished=true), διαφορετικά η μεταβλητή finished παραμένει false και στην μεταβλητή decimal καταχωρείται το μη μηδενικό ακέραιο μέρος (πηλίκο) της προηγούμενης διαίρεσης, ώστε να συνεχιστεί ο βρόχος με νέα τιμή για το decimal κ.ο.κ.


*Για το casting μπορείς να διαβάσεις στο βιβλίο στην σελ. 60.
R.I.P.
Life is so vain, but death equals pain
So let's make one more attempt and live with nothing to gain
Άβαταρ μέλους
LocknLoad
Forum Administrator
Forum Administrator
Δημοσιεύσεις: 2250
Εγγραφή: Κυρ Οκτ 07, 2007 5:34 pm

Re: Λύσεις java

Δημοσίευση από LocknLoad »

Ο binary ειναι string και ο remainder ειναι int.

Οταν κανεις "binary= remainder + binary;" Ουσιαστικα βαζεις εναν αριθμο διπλα σε εναν αλφαριθμητικο.

πχ
Αν το Binary ειναι "2" (το εβαλα σε " " για να φαινεται οτι ειναι ΓΡΑΜΜΑ και ΟΧΙ ΑΡΙΘΜΟΣ)
και το remainder ειναι 3

Με την διαταγη αυτη το binary μετα θα ειναι "32".

Αν ηταν "binary=binary + remainder;" Τοτε θα γινοτανε "23".
Ναι, [you] σε παρακολουθώ!

Εικόνα


@[you]
Εικόνα
Άβαταρ μέλους
apolski
Δημοσιεύσεις: 846
Εγγραφή: Πέμ Ιουν 21, 2007 3:09 pm
Real Name: ---
Gender: Male
Facebook ID: 0
Τοποθεσία: UK

Re: Λύσεις java

Δημοσίευση από apolski »

Οκ καταλαβα, ευχαριστω πολυ για τις απαντησεις :)
Άβαταρ μέλους
alexaiv
Δημοσιεύσεις: 101
Εγγραφή: Παρ Ιούλ 13, 2007 11:43 am
Real Name: Αλέξης Αϊβαλιώτης
Gender: Male
Τοποθεσία: Αθήνα

Re: Λύσεις java

Δημοσίευση από alexaiv »

Υπάρχει κάπου η λύση της προγραμματιστικής άσκησης 2?? Αντιμετωπίζω μια μικρή δυσκολία στο να καταλάβω τι ακριβώς κάνει η κάθε μέθοδος που ζητάει.
Η σκληρή δουλειά δεν σκότωσε ποτέ κανέναν, αλλά γιατί να παίζουμε με την τύχη μας?!?

"Μοντέλο-πρότυπο της γνώσης είναι τα μαθηματικά. Οι αισθήσεις και η φαντασία είναι κατώτερες γνωστικές δυνάμεις, τις οποίες δεν μπορούμε να εμπιστευόμαστε με την ίδια βεβαιότητα." - René Descartes
Άβαταρ μέλους
theos
Δημοσιεύσεις: 762
Εγγραφή: Κυρ Νοέμ 05, 2006 4:53 am
Real Name: Αριστοτέλης-Εμμανουήλ Θάνος-Φίλης (Μάνος) ge04017
Gender: Male
Τοποθεσία: Alwaysland

Re: Λύσεις java

Δημοσίευση από theos »

Φίλε alexaiv δες στην βιβλιοθήκη της java τι κάνουν οι μέθοδοι της κλάσης string buffer. εδώ

Αν δεν βγάλεις άκρη με κάποια συγκεκριμένη μέθοδο, ρώτα και όλο και κάποιος θα σου πει
Λογική είναι η τέχνη να κάνεις λάθος με αυτοπεποίθηση!!!
Άβαταρ μέλους
LocknLoad
Forum Administrator
Forum Administrator
Δημοσιεύσεις: 2250
Εγγραφή: Κυρ Οκτ 07, 2007 5:34 pm

Re: Λύσεις java

Δημοσίευση από LocknLoad »

Ο Σ. στη σελιδα του, μαζι με την ασκηση, μας δινει και ενα προγ. το οποιο ειναι η ασκηση λυμενη αλλα χωρις τον κωδικα. Απλα μπορεις να τον εκτελεσεις και να δεις τα σχολια (κατι σαν αυτο που σου δινει ο θεος αλλα καλυτερο μιας που μπορεις να "παιξεις" μαζι του και να καταλαβεις καλυτερα). Περα απο αυτο ομως

1)Πως βρισκουμε οτι ενας πινακας ειναι αδειος?
2)Πως διπλασιαζουμε ενα πινακα? (εφτιαξα μια μεθοδο για αυτη τι δουλεια αλλα δεν μπορω να την καλεσω. Την εβαλα private, εχει σημασια?)
3)Ποιες μεθοδοι ειναι static και πως τις ξεχωριζουμε απο τις αλλες (ειδικα τωρα που στις περισσοτερες θα καλω και την μεθοδο για διπλασ. του πινακα)
Ναι, [you] σε παρακολουθώ!

Εικόνα


@[you]
Εικόνα
Άβαταρ μέλους
theos
Δημοσιεύσεις: 762
Εγγραφή: Κυρ Νοέμ 05, 2006 4:53 am
Real Name: Αριστοτέλης-Εμμανουήλ Θάνος-Φίλης (Μάνος) ge04017
Gender: Male
Τοποθεσία: Alwaysland

Re: Λύσεις java

Δημοσίευση από theos »

1) Τρέχεις τον πίνακα και αν όλα τα στοιχεία του είναι 'null' τότε είναι "άδειος". Μπορείς στο if να προσθέσεις και ένα break αλλά ειλικρινά δεν θυμάμαι πως χρησιμοποιείται για να με βγάλει και από το if και από το for

Κώδικας: Επιλογή όλων

boolean isEmpty=true; 
for (int i=0; i<a.length; i++)
{
   if (a[i]=!null)
     isEmpty=false;
}
3) Όταν κάτι είναι static, μπορεί να εκτελεστεί και από την κλάση κατευθείαν, δεν χρειάζεται δηλαδή να φτιάξεις κάποιο αντικείμενο για να χρησιμοποιήσεις τη μέθοδο. Στον bluej όταν πατήσεις δεξί click σε κάποια κλάση σου βγάζει και τις static μεθόδους εκτός από τη δημιουργία αντικειμένων

Για το 2) δεν είμαι σίγουρος αν υπάρχει άμεσος τρόπος... Ένας τρόπος πάντως είναι να δημιουργήσεις ένα κανούργιο πίνακα με το ζητούμενο μέγεθος και να αντιγράψεις τα στοιχεία που είχες στον προηγούμενο...
Λογική είναι η τέχνη να κάνεις λάθος με αυτοπεποίθηση!!!
Άβαταρ μέλους
LocknLoad
Forum Administrator
Forum Administrator
Δημοσιεύσεις: 2250
Εγγραφή: Κυρ Οκτ 07, 2007 5:34 pm

Re: Λύσεις java

Δημοσίευση από LocknLoad »

3) Καταλαβα

1) Καταλαβα... νομιζω

2) Εφτιαξα μια μεθοδο κτλ την ειπα doubleA() και γραφω

Κώδικας: Επιλογή όλων

a=a.double();
και μου απανταει "cannot find symbol - method doubleA()"
Ναι, [you] σε παρακολουθώ!

Εικόνα


@[you]
Εικόνα
Άβαταρ μέλους
kostas.m
Δημοσιεύσεις: 118
Εγγραφή: Τρί Οκτ 23, 2007 3:24 pm
Real Name: k.mastakas
Gender: Male
Facebook ID: 0
Τοποθεσία: Στο σταυροδρόμι
Επικοινωνία:

Re: Λύσεις java

Δημοσίευση από kostas.m »

LocknLoad, για να διπλασιάσεις το διάνυσμα data, το οποίο είναι μεταβλητή και να κρατήσεις τα στοιχεία του, αρκεί απλά να δημιουργήσεις ένα καινούργιο διάνυσμα έστω temp, με to ίδιο μήκος, στο οποίο να αντιγράψεις τα στοιχεία του data, μετά, αρκεί να δηλώσεις ότι το data γίνεται ένα νέο διάνυσμα διπλάσιου μήκους και να αντιγράψεις τα στοιχεία του temp στο data.
"Πρέπει να μάθουμε, θα μάθουμε" David Hilbert
Άβαταρ μέλους
LocknLoad
Forum Administrator
Forum Administrator
Δημοσιεύσεις: 2250
Εγγραφή: Κυρ Οκτ 07, 2007 5:34 pm

Re: Λύσεις java

Δημοσίευση από LocknLoad »

Ναι, αυτο κανω (νομιζω)

Κώδικας: Επιλογή όλων

private char doubleA() 
  {
      char b[];
      int l=2*a.length;
      b=new char[l];
      for (int i=0; i< a.length; i++){
          b[i]=a[i];}
      for (int i=0; i<l; i++){
          a[i]=b[i];}}   
Ναι, [you] σε παρακολουθώ!

Εικόνα


@[you]
Εικόνα
Άβαταρ μέλους
kostas.m
Δημοσιεύσεις: 118
Εγγραφή: Τρί Οκτ 23, 2007 3:24 pm
Real Name: k.mastakas
Gender: Male
Facebook ID: 0
Τοποθεσία: Στο σταυροδρόμι
Επικοινωνία:

Re: Λύσεις java

Δημοσίευση από kostas.m »

Ναι, αυτό κάνεις, αλλά δεν διπλασιάζεις το διάνυσμα α, οπότε μετά από λίγο βγαίνει το α βγαίνει εκτός ορίων καθώς θα προσπαθήσεις να εισάγεις στοιχεία στις θέσεις a.length,a.length+1,...,2*a.length-1 θέσεις που δεν υπάρχουν στο α, οπότε αυτό δεν μπορεί να γίνει. Κάνε το ίδιο που έκανες απλά όπου l, βάλε l=a.length και b=new char[l];
for (int i=0; i< l; i++){
b=a;}
και μετά a=new char[2*l]
και for (int i=0; i<l; i++){
a=b;}}
"Πρέπει να μάθουμε, θα μάθουμε" David Hilbert
Άβαταρ μέλους
LocknLoad
Forum Administrator
Forum Administrator
Δημοσιεύσεις: 2250
Εγγραφή: Κυρ Οκτ 07, 2007 5:34 pm

Re: Λύσεις java

Δημοσίευση από LocknLoad »

Λυθηκε με msn η αποροια.

Κώδικας: Επιλογή όλων

 private char[] doubleA(){
      char b[];
      int l=a.length;
      b=new char[l];
      for (int i=0; i< l; i++){
          b[i]=a[i];}
      a=new char[2*l];    
      for (int i=0; i<l; i++){
          a[i]=b[i];}       
      return a;}  
και την καλω με

Κώδικας: Επιλογή όλων

 a=doubleA();
Ναι, [you] σε παρακολουθώ!

Εικόνα


@[you]
Εικόνα
Απάντηση

Επιστροφή στο “Πρώτο Έτος”