Αλλα

Mac «Δείκτης συμβολοσειράς εκτός εύρους: 0» ...Μπορεί κάποιος να μου πει τι συμβαίνει εδώ; (Ιάβα)

Τσέις Ρ

Πρωτότυπη αφίσα
8 Μαΐου 2008
PDX
  • 2 Ιουνίου 2009
Μόλις τελείωσα τη συγγραφή αυτού του προγράμματος για την τάξη java μου. Είναι ένα απλό πρόγραμμα που υπολογίζει πόσο κοστίζει η εγκατάσταση ενός φράχτη. Στο τέλος, ρωτά 'θα θέλατε να κάνετε άλλη εκτίμηση (Ναι/Όχι)', και ο χρήστης υποτίθεται ότι θα επιλέξει ναι ή όχι. Ωστόσο, αφού τελειώσω την εκτέλεση της δικής μου, δεν θα έχω αυτήν την επιλογή, λέει απλώς:

Υπολογισμός άλλης εκτίμησης (Ν/Ο): Εξαίρεση στο νήμα 'main' java.lang.StringIndexOutOfBoundsException: Ευρετήριο συμβολοσειράς εκτός εύρους: 0
στο java.lang.String.charAt (String.java:558)
στο Test1.main(Test1.java:73)

Γιατί το κάνει αυτό!!!

Εδώ είναι το πρόγραμμα παρεμπιπτόντως:

Κωδικός: |_+_|

Littleodie914

9 Ιουνίου 2004


Ρότσεστερ, Νέα Υόρκη
  • 2 Ιουνίου 2009
Ουάου, αυτό είναι δύσκολο. Το έβαλα να λειτουργήσει αλλάζοντας το τελευταίο σας 'read.nextLine()' σε απλώς 'read.next()', αλλά θα το κοιτάξω λίγο πιο προσεκτικά για να δω γιατί δεν λειτουργεί με τον πρώτο τρόπο.

Επεξεργασία: Φαίνεται ότι έχει να κάνει με τη μέθοδο nextLine() που προωθεί τον δείκτη πέρα ​​από την τρέχουσα γραμμή. Δεν το καταλαβαίνω τόσο πολύ ο ίδιος, αλλά αυτοί οι σύνδεσμοι μπορεί να βοηθήσουν να ξεκαθαρίσουμε μια μικρή σύγχυση:

Σαρωτής API
Σχετική ανάρτηση στο φόρουμ

HiRez

6 Ιανουαρίου 2004
Δυτικές ΗΠΑ
  • 2 Ιουνίου 2009
Πάω να μαντέψω ότι ένα από τα δικά σας προηγούμενος Οι κλήσεις ανάγνωσης αφήνουν τον χαρακτήρα νέας γραμμής στο buffer εισόδου πληκτρολογίου. Επομένως, όταν καλείτε την nextLine(), λαμβάνετε μια κενή συμβολοσειρά, που οδηγεί στην εξαίρεση που προσπαθεί να εξετάσει τον χαρακτήρα στη θέση 0, αφού δεν υπάρχει κανένας. Αυτό είναι επίσης ένα πρόβλημα με πολλές από τις λειτουργίες εισόδου C της κονσόλας. Κατά κάποιο τρόπο πιθανότατα θέλετε να ξεπλύνετε το buffer πρώτα με μια εικονική κλήση ανάγνωσης ή κάτι τέτοιο. Δεν έχω χρησιμοποιήσει Java εδώ και πολύ καιρό, οπότε δεν ξέρω ποια θα ήταν ακριβώς η σωστή διαδικασία.

gnasher729

Ανασταλεί
25 Νοεμβρίου 2005
  • 2 Ιουνίου 2009
Ο Chase R είπε: Μόλις τελείωσα τη συγγραφή αυτού του προγράμματος για την τάξη java μου. Είναι ένα απλό πρόγραμμα που υπολογίζει πόσο κοστίζει η εγκατάσταση ενός φράχτη. Στο τέλος, ρωτά 'θα θέλατε να κάνετε άλλη εκτίμηση (Ναι/Όχι)', και ο χρήστης υποτίθεται ότι θα επιλέξει ναι ή όχι. Ωστόσο, αφού τελειώσω την εκτέλεση της δικής μου, δεν θα έχω αυτήν την επιλογή, λέει απλώς:

Υπολογισμός άλλης εκτίμησης (Ν/Ο): Εξαίρεση στο νήμα 'main' java.lang.StringIndexOutOfBoundsException: Ευρετήριο συμβολοσειράς εκτός εύρους: 0
στο java.lang.String.charAt (String.java:558)
στο Test1.main(Test1.java:73)

Γιατί το κάνει αυτό!!!

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

Τώρα έχετε μια εξαίρεση που λέει ότι ένας δείκτης 0 είναι 'εκτός εύρους'. Εάν έχετε πρόσβαση σε μια συμβολοσειρά με n χαρακτήρες, ποιοι είναι οι έγκυροι δείκτες;

Τώρα μπορείτε να μας πείτε ακριβώς σε ποια κατάσταση ο δείκτης 0 δεν είναι έγκυρος δείκτης;

Αυτό θα πρέπει να απαντήσει στην ερώτησή σας.

SilentPanda

Επίτιμος συντονιστής
8 Οκτωβρίου 2002
Το Δάσος Μπαμπού
  • 2 Ιουνίου 2009
gnasher729 είπε: Εφόσον έχετε τον πηγαίο κώδικα, πιθανώς σε ένα πρόγραμμα επεξεργασίας προγράμματος που μπορεί να γίνει για να εμφανίζει αριθμούς γραμμών, θα πρέπει να μπορείτε να βρείτε πού βρίσκεται η γραμμή 73 στο αρχείο Test1.main. Αυτό θα σας δείξει πού συμβαίνει το πρόβλημα.

Η γραμμή είναι:

Κωδικός: |_+_|
αμέσως μετά την εμφάνιση της ένδειξης 'Υπολογισμός άλλης εκτίμησης (Y/N):'