Video: Curso Java 13 - Herencia @JoseCodFacilito 2024
I den här Java-kodlistan, Metoden PayOneEmployee illustrerar några användbara knep för att läsa data. I synnerhet varje skanner som du skapar har en NextLine-metod. (Du kanske inte använder den här NextLine-metoden, men metoden är ändå tillgänglig.)
När du ringer en skanners nästaLine-metod tar metoden allt fram till slutet av den aktuella textlinjen. I denna notering kan ett samtal till nextLine läsa en hel rad från EmployeeInfo. txt-fil. (I ett annat program kan en skanners nästaLine-samtal läsa allt som användaren skriver på tangentbordet upp till tryckning på Enter-tangenten.)
importera java. util. Scanner; importera java. io. Fil; importera java. io. IOException; public class DoPayroll {Public static void main (String args []) slänger IOException {Scanner diskScanner = ny Scanner (ny fil ("EmployeeInfo. txt")); för (int empNum = 1; empNum <= 3; empNum ++) {payOneEmployee (diskScanner);} diskScanner. Stäng ();} Statisk tomgångsbetalareEnmedarbetare (Scanner aScanner) {Medarbetare anEmployee = Ny Medarbetare (); en anställd. setName (aScanner. nextLine ()); en anställd. setJobTitle (aScanner. nextLine ()); en anställd. cutCheck (aScanner. nextDouble ()); ascanner. nextLine ();}}
Lägg märke till det noggranna valet av ord: nextLine läser allt fram till slutet av den aktuella raden. Tyvärr betyder det inte vad du tror att det betyder att läsa upp till slutet av den aktuella raden. Sammankoppling nextInt, nextDouble och nextLine samtal kan vara rörigt. Du måste titta på vad du gör och kontrollera programmets produktion noggrant.
För att förstå allt detta måste du vara smärtsamt medveten om en datafilens raster. Tänk på en radbrytning som extra karaktär, fast mellan en rad text och nästa. Föreställ dig då att ringa nextLine betyder att läsa allt till och med nästa radbrytning.
Ta en titt på den här siffran.
-
Om ett samtal till nextLine läser Barry Burd [LineBreak], läser det följande samtalet till nextLine VD [LineBreak].
-
Om ett samtal till nextDouble läser numret 5000. 00, läser det efterföljande samtalet till nextLine [LineBreak] som kommer strax efter numret 5000. 00. Det är allt nästaLine läser - en [LineBreak] och inget mer.)
-
Om ett samtal till nextLine läser [LineBreak] efter numret 5000. 00, läser det efterföljande samtalet till nextLine Harriet Ritter [LineBreak].
Så efter att ha läst numret 5000. 00 behöver du två samtal till nextLine för att få upp namnet Harriet Ritter. Det misstag du brukar göra är att glömma det första av dessa två samtal.
Se igen på filen i figuren. För att detta avsnitt ska fungera korrekt måste du ha en radbrytning efter den senaste 10000. 00. Om du inte gör det, gör ett slutligt samtal till nextLine ditt program krasch och bränna. Felmeddelandet läser NoSuchElementException: Ingen rad hittades.
Du kan bli förvånad över antalet quirks som du hittar i varje programmeringsspråkens skanningsmetoder. Till exempel förstörs den första nextLine som kommer från filen i figuren Barry Burd [LineBreak] från filen.
Men det nästa samtalet levererar Barry Burd (utan rader) till löpekoden. Så nextLine letar efter en radbrytning, och nästa Line förlorar linjepausen. Ja, det här är en subtil punkt. Och nej, denna subtila punkt ger aldrig någonting problem för någon.
Om den här verksamheten om nextDouble och nextLine förvirrar dig, var vänlig skyll inte på Java. Blanda inmatningssamtal är delikat arbete i vilket datorprogrammeringsspråk som helst. Och det väldigt otäcka är att varje programmeringsspråk närmar sig problemet lite annorlunda.
Vad du får veta om nästaLine i Java hjälper dig att förstå problemen när du läser C ++ eller Visual Basic, men det beskriver inte alla detaljer. Varje språks detaljer är unika för det språket.