Avatar billede renebmadsen Nybegynder
05. november 2006 - 19:47 Der er 8 kommentarer og
1 løsning

arrays del med lige og ulige pladser hjællp

public class EMail
    {
        private String adresse;        //Klassens eneste attribut
    private static String[] koder ={”dk”,”de”,….};
   
public EMail(String enA)        //Constructor med parameter
        public boolean erOK()
    }
       



2.

Lav en tilsvarende klasse, som kan håndtere  det 13-cifrede EAN-nummer, dvs. skabelon som ovenfor, og  nummeret gemmes i en String.
Nummeret valideres på følgende måde: alle cifre på de ulige positioner (1,3,5,7,9,11) adderes til en sum, som multipliceres med 3. Alle cifrene  på de lige positioner (0,2,4,6,8,10,12) adderes til en sum, som adderes til det foregående mellemresultat. Hvis den sidste sum er delelig med 10 er EAN-nummeret korrekt.
Avatar billede arne_v Ekspert
05. november 2006 - 20:01 #1
og hvad har du indtil videre ?
Avatar billede mysitesolution Nybegynder
05. november 2006 - 21:32 #2
public static boolean isValidEan(String ean)
    {
        if (ean.length() != 13)
            return false;
       
        try
        {
            long lEan = Long.parseLong(ean);
        }
        catch (NumberFormatException caught)
        {
            return false;
        }
       
        int part0 = 0, part1 = 0;
       
        for (int i = 0; i <= 10; i += 2)
        {
            part0 += Integer.valueOf(Character.toString(ean.charAt(i)));
            part1 += Integer.valueOf(Character.toString(ean.charAt(i + 1)));
        }
       
        part0 += Integer.valueOf(Character.toString(ean.charAt(12)));
       
        part1 *= 3;
       
        if ((part0 + part1) % 10 == 0)
            return true;
        else
            return false;
    }

Kan gøres mere effektiv ved at få konverteret direkte fra char til int, men den virker ;)
Avatar billede mysitesolution Nybegynder
05. november 2006 - 21:37 #3
public static boolean isValidEan(String ean)
    {
        if (ean.length() != 13)
            return false;
       
        try
        {
            long lEan = Long.parseLong(ean);
        }
        catch (NumberFormatException caught)
        {
            return false;
        }
       
        int part0 = 0, part1 = 0;
       
        for (int i = 0; i <= 10; i += 2)
        {
            part0 += ean.charAt(i) - '0';
            part1 += ean.charAt(i + 1) - '0';
        }
       
        part0 += (int)ean.charAt(12) - (int)'0';
       
        part1 *= 3;
       
        if ((part0 + part1) % 10 == 0)
            return true;
        else
            return false;
    }

der var lige en mere effektiv en... Overså noget virkelig dumt
Avatar billede mysitesolution Nybegynder
05. november 2006 - 21:38 #4
Og så kan de (int) godt slettes :/
Avatar billede mysitesolution Nybegynder
06. november 2006 - 12:43 #5
public static boolean isValidEan(String ean)
    {
        if (ean.length() != 13)
            return false;
       
        int part0 = 0, part1 = 0;
       
        for (int i = 0; i < 13; i++)
        {
            char c = ean.charAt(i);
           
            if (c < '0' || c > '9')
                return false;
           
            if (i % 2 == 0)
                part0 += c - '0';
            else
                part1 += c - '0';
        }
       
        part1 *= 3;
       
        if ((part0 + part1) % 10 == 0)
            return true;
        else
            return false;
    }
Avatar billede renebmadsen Nybegynder
06. november 2006 - 13:31 #6
det sidste virker ikke rigtigt
Avatar billede mysitesolution Nybegynder
06. november 2006 - 14:18 #7
hvilken ean streng bruger du på den?
Avatar billede renebmadsen Nybegynder
06. november 2006 - 16:08 #8
public class Ean
    {
        private String numer;   
     
     
        public Ean(String enA)     
        {
            numer = enA;
        }
public boolean isValidEan()
    {
        if (numer.length() != 13)
            return false;
       
        try
        {
            long lNumer = Long.parseLong(numer);
        }
        catch (NumberFormatException caught)
        {
            return false;
        }
       
        int ulige = 0, lige = 0;
       
        for (int i = 0; i <= 10; i += 2)
        {
            ulige += Integer.valueOf(Character.toString(numer.charAt(i)));
            lige += Integer.valueOf(Character.toString(numer.charAt(i + 1)));
        }
       
        ulige += Integer.valueOf(Character.toString(numer.charAt(12)));
       
        ulige *= 3;
               
        if ((ulige + lige) % 10 == 0)
            return true;
        else
            return false;
    } 
}
Avatar billede mysitesolution Nybegynder
07. november 2006 - 21:06 #9
public class Ean {
   
    private String _ean;
   
    public Ean(String ean) {
        _ean = ean;
    }
   
    public boolean isValidEan()
    {
        return isValidEan(_ean);
    }
   
    public static boolean isValidEan(String ean)
    {
        if (ean.length() != 13)
            return false;
     
        int part0 = 0, part1 = 0;
     
        for (int i = 0; i < 13; i++)
        {
            char c = ean.charAt(i);
         
            if (c < '0' || c > '9')
                return false;
         
            if (i % 2 == 0)
                part0 += c - '0';
            else
                part1 += c - '0';
        }
     
        part1 *= 3;
     
        if ((part0 + part1) % 10 == 0)
            return true;
        else
            return false;
    }
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester