Avatar billede touel Nybegynder
03. november 2008 - 17:08 Der er 3 kommentarer og
1 løsning

Fange Exception i forb med char Array

I følgende kode får jeg en ArrayIndexOutOfBoundsException. Jeg vil høre om det er muligt at evt. ændre i min kode, for derved at undgå denne exception, eller om man kan fange den og så gøre noget bagefter...

i følgende kode, er pwd = 7X6UTt **fast kode **
            og tempchar = 7U6U  ** midlertidig kode **

, som det det kan ses mangler der "Tt", i tempchar. Når jeg kører koden tager jeg bogstav ad gangen og sammenligner dem, men efter at U'erne er sammenlignet, får jeg exception, og det er jo klart.

Både pwd og tempchar er char [ ].

public void findCharFejl(char [] c) {
           
            char [] tempchar = new char[30];
            tempchar = c;       
            char [] pwd =new char[30];
            pwd = tmp.toCharArray();       
            ArrayList fejllist = new ArrayList();  //Forkert indtastede bogstaver eller cifre.
            ArrayList glemtlist = new ArrayList(); //Undladt at skrive en/flere bogstaver eller cifre.
            ArrayList langlist = new ArrayList();  //Skrevet for mange bogstaver eller cifre.
//            ArrayList tmplist = new ArrayList(); 
           
            int t1 = tempchar.length;
            int t2 = pwd.length;
           
           
            //hvis indhold af tempchar er lig NULL.
            for(int j=0;j<pwd.length;j++)
            {
                try
                {
                    if(t1==0)
                    {
                        System.out.println("NULL");
                        break;
                    }       
                }
                catch(ArrayIndexOutOfBoundsException e)
                {
                    System.out.println("Hvis felt er tom: "+e.getMessage());
                }
               
           
                try
                {
                    if(t1==t2) //Begge koder er lige lange.
                    {
                        if(tempchar[j]==pwd[j])
                        {
                            System.out.println(tempchar[j]+" Er ens "+pwd[j]);
                        }
                        else
                        {
                            fejllist.add(new Character(tempchar[j]));
                            System.out.println("Bogstavet stemmer ikke: "+tempchar[j]);
                        }
       
                    }
                    else if(t1<t2) //tempchar's længde er mindre end pwd.
                    {
                        int t3 = t2-t1;
                        int tal=pwd.length - t3;
                        ArrayList chGet = new ArrayList();

                   
                        if(pwd[j]==tempchar[j])
                        {
                            System.out.println(tempchar[j]+" Er ens "+pwd[j]);
                            tæller++;
                        }
                        else
                        {
                            // Med denne ArrayList indsættes det bogstav som mangler for at se
                            // om der evt. mangler flere bogstaver.
                            for(int k=0;k<tempchar.length;k++)
                            {
                                System.out.println("tempolaritet "+tempchar[k]);
                            }
                           
                            for(int i=0;i<tempchar.length;i++)
                            {
                                chGet.add(i,new Character(tempchar[i]));
                            }
//                            System.out.println("der mangler "+tæller+" bogstav(er)"+ " og chGet er: " + chGet.toString());
                            chGet.add(tæller,new Character(pwd[j]));//tilføjer det glemte bogstav
                            tæller=0;
//                            System.out.println("der mangler "+t3+" bogstav(er)"+ " og chGet er: " + chGet.toString());
                            String str = chGet.toString().replaceAll(", ","").replace("[","").replace("]","");
                            chGet.clear();
                            chGet.add(str);
                            for(int u=0;u<chGet.size();u++)
                            {
                                tempchar=chGet.get(u).toString().toCharArray();
                            }
//                            System.out.println("tempchar til sidst "+tempchar.length +  " " + tempchar.toString());
                            glemtlist.add(new Character(pwd[j]));
                            System.out.println("Der mangler et "+pwd[j]);
                            findCharFejl(tempchar);                               
                            break;
                        }
                    }
                                                       
                    else  //tempchar's længde er større end pwd.
                    {
                        int t4=t1-t2;
                        int tal=0;
//                        System.out.println("Der er "+t4+" bogstav(er) for meget");
                       
                        if(tempchar[j]==pwd[j])
                        {
                            System.out.println(tempchar[j]+" Er ens "+pwd[j]);
                            tal++;
                        }
                        else
                        {
                            ArrayList chArr = new ArrayList();

                           
//                            fylder ArrayList med hele charArray-ordet
                            for(int s=0;s<tempchar.length;s++)
                            {
                                chArr.add(s,new Character(tempchar[s]));
                            }
                           
                            chArr.remove(tal);
                            System.out.println("tempchar er nu (1): " + chArr.toString());
                            // Omdanner ArrayList til char[].
                        /*    for(int t=0;t<chArr.size();t++)
                            {
                                tempchar = chArr.get(t).toString().toCharArray();
                            }
                            System.out.println("tempchar er nu2: " + tempchar.length);
                            for(int k=0;k<tempchar.length;k++)
                            {
                                System.out.println("I for løkke "+tempchar[k]);
                            }*/
                           
//                            chArr.remove(tempchar[j]);
                           
                            System.out.println("tempchar er nu 3: " + tempchar.length);
                            String glu=chArr.toString().replaceAll(", ","").replace("[","").replace("]","");
                            chArr.clear();
                            chArr.add(glu);
                           
                            langlist.add(new Character(tempchar[j]));
                           
                            System.out.println("Der er et "+tempchar[j]+" for meget");
                            break;
                        }
                    }
                   
                }                       
                catch(ArrayIndexOutOfBoundsException e)
                {
                    System.out.println("fejl i første catch: " + e.getCause()+ " " + e.getLocalizedMessage());
                }
                catch(IndexOutOfBoundsException e)
                {
                    System.out.println("fejl i anden catch: " + e.getCause()+" " + e.getMessage());
                }
            }   
  }
Avatar billede touel Nybegynder
03. november 2008 - 19:20 #1
måske lidt for meget kode til at få styr på det.

Jeg har to char [], pwd og tempchar. Hvis pwd indeholder 7X6UTt og tempchar indeholder

7X6U, og de sammenlignes bogstav for bogstav, så får jeg Exception efter begge U'er

er sammenlignet. Jeg vil gerne på en eller anden måde, fremvise at der mangler "Tt",

dvs. 2 fejl.
Avatar billede gedfrik Nybegynder
09. november 2008 - 01:21 #2
Du starter med at finde ud af om de to char[] har samme længde.

Hvis ikke:
Nu laver du en lykke der sammenligner bogstav for bogstav:
kortChar[].length = 3
normalChar[].length = 5

for(int i = 0; i < kortChar.length; i++){
...
}

Du bruger altså den korte char's længde i din løkke så du undgår exceptions. Så undersøger du hvad der er galt. Hvis du ikke finder nogen fejl er det kun den sidste del af ordet der mangler, i dit tilfælde "Tt", og dermed udskriver du bare de sidste chars der manglede...

Jeg skal gerne uddybe hvis det behøves!

Hvis du er ligeglad med længden og bare vil undgå exceptions, så gør følgende:

int maxI = Math.min(pwd,tempchar);

for(int i = 0; i < maxI; i++){
...
}

Math.min() returnerer den mindste parameter. Du undgår dermed OutOfBoundsException!
Avatar billede gedfrik Nybegynder
09. november 2008 - 01:22 #3
lol @ lykke != løkke...
Avatar billede gedfrik Nybegynder
09. november 2008 - 01:23 #4
Jeg er træt... Endnu en rettelse:

int maxI = Math.min(pwd.length, tempchar.length);

Sorry :)
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