Video: From C to Python by Ross Rheingans-Yoo 2025
I denne Java-kodeoversigt, payOneEmployee-metoden illustrerer nogle nyttige tricks til læsning af data. Især har hver scanner, du opretter, en NextLine-metode. (Du kan muligvis ikke bruge denne nextLine-metode, men metoden er alligevel tilgængelig.)
Når du ringer til en scanner's næsteLine-metode, tager metoden alt til slutningen af den aktuelle tekstlinie. I denne notering kan et opkald til nextLine læse en hel linie fra EmployeeInfo. txt fil. (I et andet program kan en scanners næsteLine-opkald læse alt, hvad brugeren skriver på tastaturet indtil tryk på Enter-tasten.)
importer java. util. Scanner; importer java. io. Fil; importer java. io. IOException; offentlig klasse DoPayroll {public static void main (String args []) kaster IOException {Scanner diskScanner = ny scanner (ny fil ("EmployeeInfo. txt")); for (int empNum = 1; empNum <= 3; empNum ++) {payOneEmployee (diskScanner);} diskScanner. close ();} statisk ugyldig payOneEmployee (Scanner aScanner) {Medarbejder anEmployee = ny Medarbejder (); en ansat. setName (aScanner. nextLine ()); en ansat. setJobTitle (aScanner. nextLine ()); en ansat. cutCheck (aScanner. nextDouble ()); aScanner. nextLine ();}}
Bemærk det omhyggelige valg af ord: nextLine læser alt indtil slutningen af den aktuelle linje. Det betyder desværre ikke, hvad det betyder at læse op til slutningen af den aktuelle linje. Intermittering nextInt, nextDouble og nextLine-opkald kan være rodet. Du skal se, hvad du laver og tjekke programmets output omhyggeligt.
For at forstå alt dette skal du være smertefuldt opmærksom på en datafils linjeskift. Tænk på en linjeskift som et ekstra tegn, der sidder fast mellem en linje af tekst og den næste. Derefter forestille sig, at kaldet NextLine betyder at læse alt op til og med næste linjeskift.
Tag et kig på denne figur.
-
Hvis et opkald til nextLine læser Barry Burd [LineBreak], læser det efterfølgende opkald til nextLine CEO [LineBreak].
-
Hvis et opkald til nextDouble læser nummeret 5000. 00, læser det efterfølgende opkald til nextLine den [LineBreak], der kommer umiddelbart efter nummeret 5000. 00. Det er hele næsteLine læses - en [LineBreak] og ikke mere.)
-
Hvis et opkald til nextLine læser [LineBreak] efter nummeret 5000. 00, læser det efterfølgende opkald til nextLine Harriet Ritter [LineBreak].
Så efter at have læst nummeret 5000. 00, har du brug for to opkald til nextLine for at opdele navnet Harriet Ritter. Den fejl du normalt laver er at glemme det første af disse to opkald.
Se igen på filen i figuren. For at dette afsnit skal fungere korrekt, skal du have en linjeskift efter sidste 10000. 00. Hvis du ikke gør det, gør et sidste opkald til nextLine dit program nedbrud og brænde. Fejlmeddelelsen læser NoSuchElementException: Ingen linje fundet.
Du kan blive overrasket over antallet af quirks, du finder i hvert programmeringssprogs scanningsmetoder. For eksempel fortærer den første nextLine, der læser fra filen i figuren, Barry Burd [LineBreak] fra filen.
Men det næsteLine opkald leverer Barry Burd (uden linjeskift) til løbekoden. Så nextLine leder efter en linjeskift, og derefter slår NextLine linjeskiftet af. Ja, dette er et subtilt punkt. Og nej, dette subtile punkt skaber næppe problemer for nogen.
Hvis denne forretning om nextDouble og nextLine forvirrer dig, skal du ikke lægge skylden på Java. Blanding af indgående opkald er delikat arbejde på ethvert computerprogrammeringssprog. Og den virkelig grimme ting er, at hvert programmeringssprog nærmer sig problemet lidt anderledes.
Hvad du finder ud af, om NextLine i Java hjælper dig med at forstå problemerne, når du lærer at kende C ++ eller Visual Basic, men det fortæller dig ikke alle detaljer. Hvert sprogs detaljer er unikke for det pågældende sprog.