Video: Linux Tutorial for Beginners: Introduction to Linux Operating System 2024
In deze Java-codelijst, de methode payOneEmployee illustreert enkele handige trucs voor het lezen van gegevens. In het bijzonder heeft elke scanner die u maakt een NextLine-methode. (Mogelijk gebruikt u deze nextLine-methode niet, maar de methode is niettemin beschikbaar.)
Wanneer u de nextLine-methode van een scanner aanroept, grijpt de methode alles tot het einde van de huidige regel tekst. In deze lijst kan een oproep naar nextLine een hele regel van de EmployeeInfo lezen. txt-bestand. (In een ander programma kan de nextLine-oproep van een scanner alles lezen wat de gebruiker op het toetsenbord typt, totdat de Enter-toets wordt ingedrukt.)
java importeren. util. Scanner; java importeren. io. Het dossier; java importeren. io. IOException; public class DoPayroll {public static void main (String args []) gooit IOException {Scanner diskScanner = nieuwe scanner (nieuw bestand ("EmployeeInfo. txt")); for (int empNum = 1; empNum <= 3; empNum ++) {payOneEmployee (diskScanner);} diskScanner. close ();} static void payOneEmployee (Scanner aScanner) {Employee anEmployee = new Employee (); een werknemer. setName (aScanner. nextLine ()); een werknemer. setJobTitle (aScanner. nextLine ()); een werknemer. cutCheck (aScanner. nextDouble ()); aScanner. nextLine ();}}
Let op de zorgvuldige woordkeuze: nextLine leest alles tot het einde van de huidige regel. Helaas is wat het betekent om tot het einde van de huidige regel te lezen niet altijd wat u denkt dat het betekent. Het mengen van nextInt, nextDouble en nextLine-oproepen kan rommelig zijn. Je moet kijken wat je doet en de output van je programma zorgvuldig controleren.
Om dit alles te begrijpen, moet je je pijnlijk bewust zijn van de regeleinden van een databestand. Denk aan een regeleinde als extra personage, vastzittend tussen de ene regel tekst en de volgende. Stel je dan voor dat het bellen van nextline betekent dat je alles leest tot en met de volgende regeleinde.
Bekijk dit figuur nu eens.
-
Als een oproep naar nextLine Barry Burd [LineBreak] leest, leest de volgende oproep naar nextLine CEO [LineBreak].
-
Als een aanroep naar nextDouble het nummer 5000. 00 leest, leest de volgende aanroep naar nextLine de [LineBreak] die direct na het nummer 5000 komt. 00. (Dat zijn alle NextLine-waarden - een [LineBreak] en niets meer.)
-
Als een aanroep naar NextLine de [LineBreak] leest na het nummer 5000. 00, leest de volgende oproep naar nextLine Harriet Ritter [LineBreak].
Dus na het lezen van het nummer 5000. 00, hebt u twee oproepen naar nextLine nodig om de naam Harriet Ritter op te halen. De fout die u meestal maakt, is dat u de eerste van die twee oproepen vergeet.
Kijk nogmaals naar het bestand in de afbeelding. Om de code van deze sectie correct te laten werken, moet je na de laatste 10000 een regeleinde hebben. 00. Als je dit niet doet, zorgt een laatste oproep naar nextLine ervoor dat je programma crasht en brandt. Het foutbericht luidt NoSuchElementException: Geen lijn gevonden.
U zult verrast zijn door het aantal eigenaardigheden die u in de scanmethoden van elke programmeertaal aantreft. Bijvoorbeeld, de eerste nextLine die leest uit het bestand in de figuur verslindt Barry Burd [LineBreak] uit het bestand.
Maar die nextLine-aanroep levert Barry Burd (zonder regelafbreking) op de lopende code. Dus nextline zoekt naar een regeleinde en vervolgens verliest nextline de regeleinde. Ja, dit is een subtiel punt. En nee, dit subtiele punt veroorzaakt bijna nooit problemen voor iemand.
Als dit bedrijf over nextDouble en nextLine u in verwarring brengt, leg dan de schuld niet aan Java. Het mengen van input-oproepen is delicaat werk in elke computer programmeertaal. En het vervelende is dat elke programmeertaal het probleem een beetje anders benadert.
Wat u te weten komt over nextLine in Java, helpt u de problemen te begrijpen wanneer u C ++ of Visual Basic leert kennen, maar het vertelt u niet alle details. De details van elke taal zijn uniek voor die taal.