Σελίδα 3 από 4

Δημοσιεύτηκε: Τετ Νοέμ 21, 2007 11:39 pm
από timos_m
Ρε συ αυτό λέει το παιδί! Ότι η λύση αυτή είναι λάθος...

Δημοσιεύτηκε: Πέμ Νοέμ 22, 2007 12:12 am
από skywalker
prepei na arxiso na diabazo kalytera ta posts :P

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

Δημοσιεύτηκε: Πέμ Δεκ 13, 2007 11:11 pm
από 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:

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

Δημοσιεύτηκε: Πέμ Δεκ 13, 2007 11:30 pm
από 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.

Re: Λύσεις java

Δημοσιεύτηκε: Παρ Δεκ 14, 2007 12:58 pm
από LocknLoad
Ο binary ειναι string και ο remainder ειναι int.

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

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

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

Αν ηταν "binary=binary + remainder;" Τοτε θα γινοτανε "23".

Re: Λύσεις java

Δημοσιεύτηκε: Παρ Δεκ 14, 2007 6:24 pm
από apolski
Οκ καταλαβα, ευχαριστω πολυ για τις απαντησεις :)

Re: Λύσεις java

Δημοσιεύτηκε: Δευ Φεβ 04, 2008 1:27 pm
από alexaiv
Υπάρχει κάπου η λύση της προγραμματιστικής άσκησης 2?? Αντιμετωπίζω μια μικρή δυσκολία στο να καταλάβω τι ακριβώς κάνει η κάθε μέθοδος που ζητάει.

Re: Λύσεις java

Δημοσιεύτηκε: Δευ Φεβ 04, 2008 2:06 pm
από theos
Φίλε alexaiv δες στην βιβλιοθήκη της java τι κάνουν οι μέθοδοι της κλάσης string buffer. εδώ

Αν δεν βγάλεις άκρη με κάποια συγκεκριμένη μέθοδο, ρώτα και όλο και κάποιος θα σου πει

Re: Λύσεις java

Δημοσιεύτηκε: Δευ Φεβ 04, 2008 2:49 pm
από LocknLoad
Ο Σ. στη σελιδα του, μαζι με την ασκηση, μας δινει και ενα προγ. το οποιο ειναι η ασκηση λυμενη αλλα χωρις τον κωδικα. Απλα μπορεις να τον εκτελεσεις και να δεις τα σχολια (κατι σαν αυτο που σου δινει ο θεος αλλα καλυτερο μιας που μπορεις να "παιξεις" μαζι του και να καταλαβεις καλυτερα). Περα απο αυτο ομως

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

Re: Λύσεις java

Δημοσιεύτηκε: Δευ Φεβ 04, 2008 3:31 pm
από 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) δεν είμαι σίγουρος αν υπάρχει άμεσος τρόπος... Ένας τρόπος πάντως είναι να δημιουργήσεις ένα κανούργιο πίνακα με το ζητούμενο μέγεθος και να αντιγράψεις τα στοιχεία που είχες στον προηγούμενο...

Re: Λύσεις java

Δημοσιεύτηκε: Δευ Φεβ 04, 2008 6:22 pm
από LocknLoad
3) Καταλαβα

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

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

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

a=a.double();
και μου απανταει "cannot find symbol - method doubleA()"

Re: Λύσεις java

Δημοσιεύτηκε: Δευ Φεβ 04, 2008 7:07 pm
από kostas.m
LocknLoad, για να διπλασιάσεις το διάνυσμα data, το οποίο είναι μεταβλητή και να κρατήσεις τα στοιχεία του, αρκεί απλά να δημιουργήσεις ένα καινούργιο διάνυσμα έστω temp, με to ίδιο μήκος, στο οποίο να αντιγράψεις τα στοιχεία του data, μετά, αρκεί να δηλώσεις ότι το data γίνεται ένα νέο διάνυσμα διπλάσιου μήκους και να αντιγράψεις τα στοιχεία του temp στο data.

Re: Λύσεις java

Δημοσιεύτηκε: Δευ Φεβ 04, 2008 8:06 pm
από 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];}}   

Re: Λύσεις java

Δημοσιεύτηκε: Δευ Φεβ 04, 2008 8:18 pm
από 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;}}

Re: Λύσεις java

Δημοσιεύτηκε: Δευ Φεβ 04, 2008 11:58 pm
από 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();