DaDiRa Δημοσ. 11 Μαΐου 2014 Δημοσ. 11 Μαΐου 2014 Έχω ένα πρόβλημα με τον παρακάτω κώδικα. Σκοπός είναι να βρεθεί το όνομα μου μέσα στο κείμενο και να βάλει τα γράμματα σε ένα array. /*jshint multistr:true */ var text = "iojaioefhoiajefoijfDaDiRaaosdjoajdoiasjdojoajsdlkjasdlkjadkljasdl;askjDaDiRaoaisdjoaijsopidjaosdjaosdijaodijaoidjasodijoasijda"; var myName = "DaDiRa"; var hits = []; for (i=0; i < text.length; i++) { if (text[i] === myName[0]) { for (j = i; j < myName.length; j++) { hits.push(j) } } } Ξέρω ότι έχω λάθος μέσα στο 2ο for loop, αλλά δεν μπορώ να καταλάβω πως να το διορθώσω. Θέλω το j να είναι μικρότερο από το μήκος του ονόματός μου, έτσι ώστε να σταματάει να κάνει push τα γράμματα σε array όταν τελειώσει, αλλά οι οδηγίες μου λένε "Your loop should stop when it hits the value of the first iterator (say, i) plus the length of your myNamevariable." Επίσης, είναι σωστό που έβαλα το να κάνει push to j; Αφού θέλω να βάζει σε array όλα τα γράμματα, και το j είναι το i που εκείνη τη στιγμή έχει τιμή το "D";
defacer Δημοσ. 11 Μαΐου 2014 Δημοσ. 11 Μαΐου 2014 Hint: Εφόσον θα ελέγχεις αν ταιριάζουν τα γράμματα ένα-ένα (που δεν είναι ούτε ο βολικότερος ούτε ο γρηγορότερος τρόπος, αλλά απ' ότι φαίνεται πρόκειται για άσκηση που συγκεκριμένα το θέλει έτσι), θα πρέπει αναγκαστικά να έχεις κάπου ένα μετρητή από το 0 μέχρι το myName.length - 1 με τον οποίο θα βλέπεις αν έχουν ταιριάξει όλα τα γράμματα (και άρα βρήκες αυτό που ψάχνεις). Δεν καταλαβαίνω με τίποτα αυτό που ζητάει να κάνεις με το hits. Πρώτον είναι προφανές ποιό θα είναι το τελικό περιεχόμενο άρα δεν υπάρχει κανένας λόγος να το κάνεις γράμμα-γράμμα, και δεύτερον δε βλέπω τη διδακτική αξία του να γράψει κανείς hits.push.
parsifal Δημοσ. 11 Μαΐου 2014 Δημοσ. 11 Μαΐου 2014 Αυτή είναι δυστυχώς μία από τις όχι και τόσο πετυχημένες ασκήσεις στο JavaScript course του Codecademy. Για να την «περάσεις», θα πρέπει να αλλάξεις τη συνθήκη τερματισμού του εσωτερικού for loop σε j < i + myName.length;
DaDiRa Δημοσ. 12 Μαΐου 2014 Μέλος Δημοσ. 12 Μαΐου 2014 Hint: Εφόσον θα ελέγχεις αν ταιριάζουν τα γράμματα ένα-ένα (που δεν είναι ούτε ο βολικότερος ούτε ο γρηγορότερος τρόπος, αλλά απ' ότι φαίνεται πρόκειται για άσκηση που συγκεκριμένα το θέλει έτσι), θα πρέπει αναγκαστικά να έχεις κάπου ένα μετρητή από το 0 μέχρι το myName.length - 1 με τον οποίο θα βλέπεις αν έχουν ταιριάξει όλα τα γράμματα (και άρα βρήκες αυτό που ψάχνεις). Δεν καταλαβαίνω με τίποτα αυτό που ζητάει να κάνεις με το hits. Πρώτον είναι προφανές ποιό θα είναι το τελικό περιεχόμενο άρα δεν υπάρχει κανένας λόγος να το κάνεις γράμμα-γράμμα, και δεύτερον δε βλέπω τη διδακτική αξία του να γράψει κανείς hits.push. Τι να σου πω, και εγώ τις οδηγίες ακολουθώ. Πάντως βρήκα τη λύση. Αυτή είναι δυστυχώς μία από τις όχι και τόσο πετυχημένες ασκήσεις στο JavaScript course του Codecademy. Για να την «περάσεις», θα πρέπει να αλλάξεις τη συνθήκη τερματισμού του εσωτερικού for loop σε j < i + myName.length; Η αλήθεια είναι ότι με πέταξε κατευθείαν στα βαθειά, χωρίς πολλές διευκρινήσεις, πράγμα που δεν συνηθίζει γενικά. Αυτό το έκανα, αλλά μπορείς να μου εξηγήσεις γιατί γίνεται αυτή η πρόσθεση; Δεν θέλουμε το 2ο loop να σταματάει όταν τελειώσει με το όνομα μου; Διόρθωσα και μερικά λαθάκια που είχα και ο τελικός (και σωστός) κώδικας είναι ο παρακάτω, για όποιον κολλήσει στο μέλλον: /*jshint multistr:true */ var text = "iojaioefhoiajefoijfDaDiRaaosdjoajdoiasjdojoajsdlkjasdlkjadkljasdl;askjDaDiRaoaisdjoaijsopidjaosdjaosdijaodijaoidjasodijoasijda"; var myName = "DaDiRa"; var hits = []; for (i=0; i < text.length; i++) { if (text[i] === "D") { for (j = i; j < (myName.length + i); j++) { hits.push(text[j]); } } } if (hits.length !== 0) { console.log(hits); } else { console.log("Your name wasn't found!"); }
defacer Δημοσ. 12 Μαΐου 2014 Δημοσ. 12 Μαΐου 2014 Αυτός δεν είναι σωστός κώδικας γιατί δε λαμβάνεις υπόψη την περίπτωση όπου υπάρχει μέσα στο text ένα prefix του ονόματός σου αλλά όχι ολόκληρο το όνομα: var text = "-----DaDi----";Επίσης δε λαμβάνεις υπόψη την περίπτωση όπου το όνομα ή prefixes αυτού εμφανίζονται παραπάνω από μία φορά: var text = "DDDDDDDDDDDDDDD";Ούτε και την περίπτωση όπου εμφανίζεται ένα prefix του ονόματός σου στο τέλος της εισόδου: var text = "-----DaDi";
parsifal Δημοσ. 12 Μαΐου 2014 Δημοσ. 12 Μαΐου 2014 Αυτό το έκανα, αλλά μπορείς να μου εξηγήσεις γιατί γίνεται αυτή η πρόσθεση; Δεν θέλουμε το 2ο loop να σταματάει όταν τελειώσει με το όνομα μου; Όπως έγραψα, η άσκηση είναι κακογραμμένη. Αυτό που σου ζητάει να κάνεις στον τίτλο της δεν έχει καμία σχέση με αυτό που περιμένει να κάνεις για να περάσεις την άσκηση. Αν θες όμως, μπορούμε να συζητήσουμε για το πώς θα έπρεπε να λύνεται στη γενική μορφή του το πρόβλημα της αναζήτησης string μέσα σε string, σε Javascript.
DaDiRa Δημοσ. 12 Μαΐου 2014 Μέλος Δημοσ. 12 Μαΐου 2014 Αυτός δεν είναι σωστός κώδικας γιατί δε λαμβάνεις υπόψη την περίπτωση όπου υπάρχει μέσα στο text ένα prefix του ονόματός σου αλλά όχι ολόκληρο το όνομα: var text = "-----DaDi----";Επίσης δε λαμβάνεις υπόψη την περίπτωση όπου το όνομα ή prefixes αυτού εμφανίζονται παραπάνω από μία φορά: var text = "DDDDDDDDDDDDDDD";Ούτε και την περίπτωση όπου εμφανίζεται ένα prefix του ονόματός σου στο τέλος της εισόδου: var text = "-----DaDi"; Όταν λέω σωστό, δεν εννοώ έτοιμο να τρέξει σε κάθε περίπτωση. Η προϋπόθεση της άσκησης ήταν πως το κείμενο περιέχει μόνο μικρά και το όνομά μου αρχίζει από κεφαλαίο, έτσι ώστε να παραλειφθεί τέτοιου είδους μπέρδεμα. Δεν ξέρω αν είναι προγραμματιστικά σωστό, πάντως κάνει για να περάσεις το μάθημα... Όπως έγραψα, η άσκηση είναι κακογραμμένη. Αυτό που σου ζητάει να κάνεις στον τίτλο της δεν έχει καμία σχέση με αυτό που περιμένει να κάνεις για να περάσεις την άσκηση. Αν θες όμως, μπορούμε να συζητήσουμε για το πώς θα έπρεπε να λύνεται στη γενική μορφή του το πρόβλημα της αναζήτησης string μέσα σε string, σε Javascript. Όχι, προς το παρών για να μην μπερδευτώ και με πράγματα που ίσως ακόμα δεν έχω μάθει.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα