Tänkte skapa mig ett personnummerobjekt, på formen ÅÅMMDD-XXXX, och skicka detta till en metod för att kontrollera om det är korrekt, för att göra detta borde jag väl använda mig av en array eftersom varje enskild siffra skall kunna plockas ut och kontrolleras..? hur skulle själva inläsningen och anropet av metoden se ut? framförallt även konstruktorn? :\ tänkte att själva första kontrollen i metoden kontrolleraPrn skulle vara något liknande som nedanstående, ör att plocka ut en enskild siffra.. i detta fall kontrollsiffran för att bestämma könet på personen i fråga. t.ex, då:
Om du läser in data som string så har du ju en array där direkt. Du skulle ju kunna loopa igenom strängens element och ta ut ett i taget med charAt-metoden till String och sen testa om siffra och isf omvandla till int. Ett annat alternativ är att använda parseInt(String).
import extra.*;
public class testa{
public static void main (String[] arg) {
String saken;
Std.out.print("Skriv ett personnummer: ");
saken = Std.in.readWord();
Std.out.println("Personnumret var: " + saken);
}
}
Hur tar jag ut en visst element i "saken"?!
Om jag vet att saken skall vara lika långt som personnumret på formen ÅÅMMDD-ABCD, hur tar jag ut "C" ur detta t.ex.?
for(int i=0;i<saken.length();i++) {
if(saken.charAt(i)<='9' || saken.charAt(i)>='0')
//tecknet är ett tal mellan 0 och 9
//gör något skoj med talet
else
//tecknet var inte ett tal.
}
För ovan bör du väl hålla koll på antalet siffror som matats in. Men jag skulle nog föredra att ta ut år för sig, månad för sig, datum för sig samt kontrollnumren för sig:
Mer 1/2 pseudo
String year=delsträng_av_saken_från_0_till_1
String month=delsträng_av_saken_från_2_till_3
String day=delsträng_av_saken_från_4_till_5
String check=delsträng_av_saken_från_6_till_9
//för att sen kolla vidare kan man ju ta ut siffra för siffra och
//dra ifrån '0' för att få en int. Alternativt använda parseInt.
Vad det gäller att tecken ska vara en siffra och att inmatningen ska ha rätt längd är det kanske lämpligt att göra inmatningen i en loop där man kollar att det är okej, i annat fall ombeds användaren att mata in på nytt. :)
grejen är ju att ett '-' finns med i talet.. dvs ÅÅMMDD-XXXX...
delsträng_av_saken_från_6_till_9 <-- hur formulerar man detta i kod? för att plocka ut varje enskilt tecken ut saken?
Kolla in substring i klassen String -> http://java.sun.com/j2se/1.4.2/docs/api/. Vad det gäller '-' är det väl bara att "skala bort" det tecknet när du läser in hela strängen eller hoppa över det tecknet när du tar delsträngen.
Å andra sidan kör du ju med Skansholms extra paket så kolla in boken du antagligen kör efter (Java Direkt) :)
som i en vanlig array där man kan köra if(saken[9]%2==0){ String sex="woman"; }? hur gör jag detta om jag har en String?
Alltså. Med charAt() får du tillbaka en ascii-char. Det du behöver göra är att dra bort ASCII-representationen vilket du gör genom att dra bort '0' som motsvarar talet 48. (kolla http://www.asciitable.com). Det som finns kvar är då talet i sin rätta representation. :)
Jag är ganska säker på att du behöver dela ned din uppgift i flera delproblem för att få till det.
\r Jag ska tydligen lära mig att läsa en tråd till slutet innan jag svarar så att jag ser om upphovsmannen löser sina egna problem ;) Jaja, bra jobbat.