tazos87 Δημοσ. 5 Μαΐου 2014 Δημοσ. 5 Μαΐου 2014 Είχα γράψει κάτι πριν σχετικά... Το προγραμματάκι κάνει τα εξής 2 πράγματα: 1) Παίρνει τον 4ψήφιο κωδικό που εισάγει ο χρήστης,τον κωδικοποιεί και τον ανακατεύει και τον προβάλλει στην οθόνη. 2) Στη 2η κλάση που εισάγω ως constructor τη 1η κλασση, δεν μου παίρνει τη μέθοδο setNumber(). Οτι και να δοκιμάσω,το βγάζει λάθος... Η κλάση με constructor: package secret; import java.util.*; public class secret { Scanner input = new Scanner(System.in); private int number; public secret(int theNumber) { theNumber = number; } public void setNumber(int theNumber) { theNumber = number; System.out.println("Enter the number: "); number = input.nextInt(); // Παίρνω μεμονωμένα τα ψηφία απο τον εισαγόμενο αριθμό int ena = (number / 1000) % 10; int duo = (number / 100) % 10; int tria = (number / 10) % 10; int tessera = number % 10; // Κρυπτογράφηση και καλά!!! int newEna = (ena + 7) % 10; int newDuo = (duo + 7) % 10; int newTria = (tria + 7) % 10; int newTessera = (tessera + 7) % 10; String teliko = newTria+""+newTessera+""+newEna+""+newDuo; // Μετατρέπω σε String number = Integer.valueOf(teliko).intValue(); } public int getNumber() { return number; } public void displayMessage() { System.out.println( getNumber() ); } } Η 2η κλάση που εισάγω τις μεθόδους (αλλά βγαίνει λάθος εκτος απο το getNumber() ): package secret; public class secreTest { public static void main(String[] args) { secret mySecret = new secret(); mySecret.setNumber(); mySecret.getNumber(); // Εδώ και κάτω θα έκανα τη μετατροπή του "κωδικοποιημένου" αριθμού στον αρχικό int a = (newEna + 3) % 10; int b = (newDuo + 3) % 10; int c = (newTria + 3) % 10; int d = (newTessera + 3) % 10; String teliko = ""+a+""+b+""+c+""+d; // Μετατρέπω σε String int telos = Integer.valueOf(teliko).intValue(); // Μετατρέπω σε Int System.out.println(telos); } } Σας ευχαριστώ όλους για τον χρόνο.
nilosgr Δημοσ. 6 Μαΐου 2014 Δημοσ. 6 Μαΐου 2014 Αντι για: theNumber = number; βαλε: number = theNumber; 1
gon1332 Δημοσ. 6 Μαΐου 2014 Δημοσ. 6 Μαΐου 2014 Δεν άλλαξε τίποτα! Αυτό που σου είπε ο nilosgr είναι ένα πρόβλημα που θα το συναντούσες αργά ή γρήγορα μπροστά σου. Η setNumber βλέπω ότι παίρνει ένα όρισμα. Εσύ κατά την κλήση της από τη main δε δίνεις κάποια είσοδο στη μέθοδο. EDIT: Τώρα το είδα λίγο καλύτερα. Περνάς όρισμα στη setNumber και παράλληλα διαβάζεις με τη Scanner έναν αριθμό για να επεξεργαστείς. Η τελευταία δουλειά γίνεται συνήθως από τη main (ειδικά στον κωδικά σου). Για κοίταξε και αυτό που σου είπε ο nilosgr (και στον constructor και στη setNumber). Πες μας πως σκέφτεσαι το σχεδιασμό του προγράμματος που υλοποιείς. Τι ακριβώς θέλεις να κάνεις η setNumber, η getNumber, κλπ...
tazos87 Δημοσ. 6 Μαΐου 2014 Μέλος Δημοσ. 6 Μαΐου 2014 Βασικά στη κλήση της μεθόδου, θέλω να ζητάει είσοδο αριθμού απο τον χρήστη... άρα να βάλω input.nextInt() ?
gon1332 Δημοσ. 6 Μαΐου 2014 Δημοσ. 6 Μαΐου 2014 Βασικά στη κλήση της μεθόδου, θέλω να ζητάει είσοδο αριθμού απο τον χρήστη... άρα να βάλω input.nextInt() ? Τότε δε χρειάζεται να έχει κάποιο όρισμα η setNumber. Μόνο το prompt για τον χρήστη και την εντολή για εισαγωγή αριθμού από το χρήστη. Καθιστάς όμως έτσι τον constructor σου άχρηστο όσον αφορά τη βασική λειτουργικότητα του προγράμματος. Αυτό είναι εργασία ή κάτι άσχετο; Αν είναι εργασία σας είπαν να έχει ακριβώς αυτή τη μορφή ή σας το άφησαν ελεύθερο;
tazos87 Δημοσ. 6 Μαΐου 2014 Μέλος Δημοσ. 6 Μαΐου 2014 Είναι άσκηση βιβλίου.Ελεγε να ζητάω από τον χρήστη έναν 4ψήφιο αριθμο, μετα να τον κωδικοποιήσω όπως λέει (προσθετοντας το 7 και παίρνοντας το υπόλοιπο της διαίρεσης του με το 10) και να τον κανω Print. Μετά σε άλλη εφαρμογή να παίρνω έναν "κωδικοποιημένο" αριθμό και να τον επαναφέρω στην αρχική του τιμή. Αν είναι έτσι,οκ το έκανα. Απλά εγώ θέλω να καλώ στη 2η κλάση(που έχει και τη main) μεθόδους της 1ης κλασης για Input απο χρήστη, τη κωδικοποίηση, και στο τέλος να κάνω την αποκωδικοποίηση! Ειμαι αρχή βέβαια,αλλά φαντάζομαι έτσι θα μάθω. Edit: Δεν ξέρω αν γίνεται,δηλαδή να μπορώ να τρέξω από μόνη της τη 1η κλάση κανονικά με input και με τη κωδικοποίηση, ΑΛΛΑ και να μπορώ να τις καλέσω σαν μεθόδους στη 2η κλάση που γίνεται η κωδικοποίηση!
gon1332 Δημοσ. 7 Μαΐου 2014 Δημοσ. 7 Μαΐου 2014 Με μικρές αλλαγές πάνω σε αυτό που έχεις ήδη κάνει, θα μπορούσες να ακολουθήσεις ένα τέτοιο δρόμο: class secret package test; import java.util.*; public class secret { private Scanner input; private int number; private int cypheredNum; private int decypheredNum; private int length; private int[] digits; public secret () { this.input = new Scanner(System.in); } public void cypherNumber () { // input a number System.out.println("Enter the number: "); this.number = input.nextInt(); // calculate its logistics this.length = (int) Math.log10(this.number) + 1; this.digits = new int[length]; int mult = (int) Math.pow(10, (length - 1)); // isolate its digits int i = 0; while (mult >= 1) { this.digits[i++] = (this.number / mult) % 10; mult /= 10; } // cypher it String tmp = ""; i = 0; while (i < this.length) { this.digits[i] = (this.digits[i] + 7) % 10; tmp += this.digits[i++]; } this.cypheredNum = Integer.valueOf(tmp).intValue(); } public void decypherNumber () { String tmp = ""; int i = 0; while (i < this.length) { tmp += ((this.digits[i++] + 3) % 10); } this.decypheredNum = Integer.valueOf(tmp).intValue(); } public int getCypheredNumber () { return this.cypheredNum; } public int getDecypheredNumber () { return this.decypheredNum; } } class secreTest package test; public class secreTest { public static void main (String[] args) { secret mySecret = new secret(); mySecret.cypherNumber(); System.out.println("cyphered number is " + mySecret.getCypheredNumber()); mySecret.decypherNumber(); System.out.println("decyphered number is " + mySecret.getDecypheredNumber()); } } Όπως θα δεις το έκανα πιο γενικό: δέχεται αριθμούς με ποικίλο αριθμό ψηφίων. Υ.Γ.: Δε μου αρέσει αυτή η υλοποίηση, αλλά χαλάλι. Χαλάμε εμείς χατίρι;
tazos87 Δημοσ. 7 Μαΐου 2014 Μέλος Δημοσ. 7 Μαΐου 2014 Ωραία,ευχαριστώ!Δεν ξέρω αν είναι καλός αυτός ο τρόπος,αλλά ήθελα να δω πως γίνεται... Για 4ψήφιο αριθμό έλεγε η άσκηση, αλλά δεν ξέρω πως μπορώ να περιορίσω ακόμα πχ αν ο χρήστης βαλει 5ψηφιο να μη το δεχτεί και να ξαναζητήσει -δεν το ζητούσε και η ασκηση! Βασικά στην άσκηση ακόμα και το να απομονώσω τα ψηφία του εισαγόμενου αριθμού που ζητάει, ήταν κάτι που δεν το έχει αναφέρει ακόμα στο βιβλίο,οπότε ψάχνοντας το βρήκα... Θα δω αύριο τη μετατροπή σου γιατί τα τελευταία βράδια έχω ξημερώσει! Ούτε insomnia να είχα Χαίρε!
gon1332 Δημοσ. 7 Μαΐου 2014 Δημοσ. 7 Μαΐου 2014 Ωραία,ευχαριστώ! Δεν ξέρω αν είναι καλός αυτός ο τρόπος,αλλά ήθελα να δω πως γίνεται... Δεν είναι καλός αυτός ο σχεδιασμός, αλλά καλώς άν το θέτεις έτσι. Για 4ψήφιο αριθμό έλεγε η άσκηση, αλλά δεν ξέρω πως μπορώ να περιορίσω ακόμα πχ αν ο χρήστης βαλει 5ψηφιο να μη το δεχτεί και να ξαναζητήσει -δεν το ζητούσε και η ασκηση! Βασικά στην άσκηση ακόμα και το να απομονώσω τα ψηφία του εισαγόμενου αριθμού που ζητάει, ήταν κάτι που δεν το έχει αναφέρει ακόμα στο βιβλίο,οπότε ψάχνοντας το βρήκα... Για την απομόνωση των στοιχείω δε χρειάζεται να λέει κάτι το βιβλίο. Είναι απλά μαθηματικά σχολείου. Είναι και μία συνηθισμένη ασκησούλα εξάσκησης στις επαναλήψεις του Προγραμματισμού τρίτης λυκείου. Το σίγουρο είναι ότι θα μπορούσες να συγχωνεύσεις το στάδιο της απομόνωσης με αυτό της κρυπτογράφησης: // isolate and cypher it (make it a real suffer) String tmp = ""; i = 0; while (i < this.length || mult >= 1) { // the second condition is not really needed ... this.digits[i] = (((this.number / mult) % 10) + 7) % 10; tmp += this.digits[i++]; mult /= 10; } Αν έχω κάνει κάποια αβλεψία πες μου. Δεν το έχω δοκιμάσει, αλλά φαίνεται οκ.
tazos87 Δημοσ. 7 Μαΐου 2014 Μέλος Δημοσ. 7 Μαΐου 2014 Καλα τα λες,αλλα προγραμματισμό στο σχολείο δεν καναμε ούτε για αστείο! Η πληροφορική που καναμε ηταν να μπουμε στο τσατ του mad... :@ Δεν εχω δει ακόμα το this,αλλα το πετυχαίνω παντού. Το mult ειναι μεταβλητή ή λεξη κλειδι;(ειμαι απο κινητό τωρα)
gon1332 Δημοσ. 7 Μαΐου 2014 Δημοσ. 7 Μαΐου 2014 Καλα τα λες,αλλα προγραμματισμό στο σχολείο δεν καναμε ούτε για αστείο! Η πληροφορική που καναμε ηταν να μπουμε στο τσατ του mad... :@ Δεν εχω δει ακόμα το this,αλλα το πετυχαίνω παντού. Το mult ειναι μεταβλητή ή λεξη κλειδι;(ειμαι απο κινητό τωρα) To this δες το στο παρακάτω παράδειγμα: class Date { ... private int month; // field ... public void setMonth (int month) // method { this.month = month; } ... } Δες τη μέθοδο setMonth. Για να ξερχωρίσεις το όρισμα month από το πεδίο της κλάσης που είναι πάλι month, βάζεις το this μπροστά από το πεδίο της κλάσης, για να δείξεις ότι αναφέρεσαι σε αυτό. Αυτά σε γενικές γραμμές. Υπάρχουν και περιπτώσεις που δε χρειάζεται το this. Για παράδειγμα όταν στο παραπάνω παράδειγμα το όρισμα είχε διαφορετικό όνομα. Θα το διαβάσεις καλύτερα από το βιβλίο. Επίσης τρέχει και ένας μικρός πόλεμος με αυτούς που επιμένουν ότι πρέπει να μπαίνει παντού (όπου έχει νόημα) και αυτούς που είναι πιο χαλαροί σε αυτό το ζήτημα (εγώ τους λέω hipsters). Μία ανάλογη διαφωνία στη Java είναι και αυτή με τους πίνακες: μπορούν ή δε μπορούν να θεωρηθούν σαν αντικείμενα; Το mult δεν είναι λέξη-κλειδί. Όπως βλέπεις το δηλώνω ως int.
tazos87 Δημοσ. 7 Μαΐου 2014 Μέλος Δημοσ. 7 Μαΐου 2014 Σωστά, ειχα αφησει τα 2 που εγραψες πιο πανω και δεν ειδα οτι το ειχες δηλωσει! Ευχαριστώ για τη βοηθεια,το σίγουρο ειναι οτι εχω πολυυυ διαβασμα μπροστά μου!
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα