BromsMedlem sedan sep. 2002188 inlägg 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å:
if(minasiffror[9]%2==0){ String sex="woman"; }
PeWMedlem sedan juni 200010 432 inlägg 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).
BromsMedlem sedan sep. 2002188 inlägg Men om jag som en första test kör detta
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.?
PeWMedlem sedan juni 200010 432 inlägg 1/2-pseudo:
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. :)
BromsMedlem sedan sep. 2002188 inlägg 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?
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?
PeWMedlem sedan juni 200010 432 inlägg
Broms skrev:
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.
BromsMedlem sedan sep. 2002188 inlägg Såja, kikade även i en annan tråd rörande Substring, löste det såhär:
import extra.*;
public class Personnummertest{
public static void main (String[] arg) {
String foo,foo2;
Std.out.print("Ange ett personnummer på formen ÅÅMMDD-XXXX: ");
foo = Std.in.readWord();
String find = "-";
String replace = "";
foo2=foo.replaceAll(find, replace);
Std.out.print("Personnumret på formen ÅÅMMDDXXXX: ");
Std.out.println(foo2);
} // main
} // class
BromsMedlem sedan sep. 2002188 inlägg Löste det med att göra om stringen till en long.. gjorde den till int från början med fick tydligen inte plats...
public long konverteraPersonnummer(String checkpnr){
long temp2;
String temp = "";
String find = "-";
String replace = "";
temp = checkpnr.replaceAll(find, replace);
temp2 = Long.parseLong(temp);
return temp2;
}
spangoMedlem sedan juni 20008 205 inlägg \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.
BromsMedlem sedan sep. 2002188 inlägg spango: hjälp mig i tråden "Felsökning?" då? :D gogogo