Hur läser man in värden som är sparade i en fil?
Värdena består utav int:s.
Kan man läsa in ints direkt med nån metod? Eller kan man läsa in varje char med tex FileInputStream och sen omvandla till int?
I vilket fall som helst måste man väl ha nåt slags stopp-tecken mellan talen? Kan man lösa det genom att varje tal står på en rad och så att man läser in hela raden vid varje inläsning. Då slipper man en massa stopp-tecken.
Är det en text fil eller en binär fil? Om det är en binär fil så är ju alla ints 4 byte, då behövs inget stop tecken mellan varje. Du använder då en DataInputStream för att läsa från filen
DataInputStrea dis=new DataInputStream(new FileInputStream("kalle.dat"));
int tal1=dis.readInt();
int tal2=dis.readInt();
dis.close();
Om det är en text fil så kan det bli mycket svårare, men då är funktionen Integer.parseInt bra att använda för att konvertera en text sträng till en int.
Vet du hur långa dessa intar är? Om de alla alltid är lika långa borde du ju kunna läsa in det antalet tecken och, som Viktor sa, parseInt:a dom och spara undan på rätt plats
Är det en textfil är allt som står där strängar och ska behandlas som strängar. Det betyder att varje ord (int i det här fallet) även har ett \0 - tecken.. dvs det stopptecken du skrev om. Så det är bara att läsa in ett ord i taget och konvertera om det ordet till en Integer (det som man får när man parsar genom metoden parseInt, vilket egentligen inte är en äkta int i bemärkelsen primitiven int).
Java använder inga \0-tecken, du får göra något i stil med det här:
BufferedReader in = ...;
String line;
while ((line = in.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line); // antar att talen är åtskilda av whitespace
while (st.hasMoreTokens()) doSomething(Integer.parseInt(st.nextToken()))
}
Ok, det var ett tag sedan jag proggade i Java och Haskellkursen genererade ett antal overflows i minnet :p
Men hur markeras strängslut i java då, enligt dig? Hur tar jvm reda på längden av en sträng (sätter size) om den inte har en terminering av strängen? Såvitt jag sett så anger man inte saker som "kalle"5 eller "kalle<slut>" ;) :p
Ok, det är skillnad på primitiva chararrays och Strings i både Java och C++, då det senare är ett objekt och det första en primitiv, men i botten är även värdet av Strings ett antal sammansatta byten i minnet (primitiv chararray).
Om det inte fanns en terminering av strängarna skulle en åtskillnad av ord mha whitespace oåterkalleligt ge att ord som "Junk food" ge uppdelning av orden till "Junk" och "Food", eller hur? ;)
Men hur markeras strängslut i java då, enligt dig? Hur tar jvm reda på längden av en sträng (sätter size) om den inte har en terminering av strängen? Såvitt jag sett så anger man inte saker som "kalle"5 eller "kalle<slut>" ;) :p
Strängar lagras internt i java.lang.String som char[], och arrayers längd hållre man koll på med medlemsvariabeln length :p
Om du inte tror mig kan du ju ta och kika i src.zip som följer med JDK:n.
PeW skrev:
Om det inte fanns en terminering av strängarna skulle en åtskillnad av ord mha whitespace oåterkalleligt ge att ord som "Junk food" ge uppdelning av orden till "Junk" och "Food", eller hur? ;)
Mmm, men när man bara trixar med siffror (som i exemplet ovan) funkar whitespace himla bra som separator...
Strängar lagras internt i java.lang.String som char[], och arrayers längd hållre man koll på med medlemsvariabeln length
Om du inte tror mig kan du ju ta och kika i src.zip som följer med JDK:n.
Jag skrev ju samma sak så varför skulle jag inte tro dig? ;) Visst håller man koll på längen av strängen genom lenght (inte size som jag skrev), men det värdet kommer sig ju av att man nånstans räknat fram antalet tecken till terminering av strängen, eller hur?
Jaja, skitsamma... inget att tjafsa om, nu ska jag slänga ihop en lexicalanalysator och rekursiv prediktiv parser - i C :p :)
[...] konvertera om det ordet till en Integer (det som man får när man parsar genom metoden parseInt, vilket egentligen inte är en äkta int i bemärkelsen primitiven int).
Integer.parseInt returnerar ingenting annat än int.
PeW skrev:
Jaja, skitsamma... inget att tjafsa om, nu ska jag slänga ihop en lexicalanalysator och rekursiv prediktiv parser - i C
Integer.parseInt returnerar ingenting annat än int.
Japp, det var fel av mig. Har inget att "skylla på" och tänker inte ens försöka.
Sang-Drax skrev:
Oooh vad du är duktig.:OO
Säger du det? Jag vet inte vad du har för ambitioner när du skriver inlägg, det kanske är att vara duktig, vad vet jag? Det jag ivf gjorde var att ironisera över situationen genom att tillstå att språket C är roligare, men du kanske inte fattade det?
170 ms totalt · 3 externa anrop · v20260731065814-full.b746b907