Avatar billede aslan Nybegynder
03. april 2002 - 21:46 Der er 9 kommentarer og
1 løsning

Jeg får en nullpointerexception efter 3 forsøg?

Jeg har skrevet dette program hvor jeg propper 3 brugere i en array og så er det meningen at man skal kunne skrive den rigtige bruger ind før man kan komme ind, men jeg får en nullpointerexception efter 3 forsøg?


import javagently.*;
import java.io.*;

class Signup
{

    Signup()throws IOException
    {

        Bruger password[] = new Bruger[10];

        int index=0;

        password[0] = new Bruger("Bo","Hansen");
        password[1] = new Bruger("Maria","Olsen");
        password[2] = new Bruger("Søren","Petersen");

        Display d = new Display("Welcome to JAVA-Signup");

        d.prompt("Username","xxxx");

        d.prompt("Password","xxxx");

        String name="";
        String kode;

      for(index=0;!password[index].brugerId.equals(name);index++)
      {
        if(password[index].brugerId.equals("stop")) break;

        d.ready(" Tryk ready når de har indtastet \n");

        name = d.getString("Username");
        kode = d.getString("Password");

      }

    }
    public static void main(String[] aslan)throws IOException
    {
        new Signup();
    }
}
class Bruger
{
    String brugerId,kode;

    Bruger(String b,String k)
    {
        brugerId = b;
        kode = k;

    }
    public String toString()
    {
        return brugerId+" "+kode;
    }
}
Avatar billede aslan Nybegynder
03. april 2002 - 21:50 #1
ups har rettet lidt i det:

import javagently.*;
import java.io.*;

class Signup
{

    Signup()throws IOException
    {

        Bruger password[] = new Bruger[10];

        int index=0;

        password[0] = new Bruger("Bo","Hansen");
        password[1] = new Bruger("Maria","Olsen");
        password[2] = new Bruger("Søren","Petersen");

        Display d = new Display("Welcome to JAVA-Signup");

        d.prompt("Username","xxxx");

        d.prompt("Password","xxxx");

        String name="";
        String kode;

      while(!password[index].brugerId.equals(name))
      {


        d.ready(" Tryk ready når de har indtastet \n");

        name = d.getString("Username");
        kode = d.getString("Password");

      }

    }
    public static void main(String[] aslan)throws IOException
    {
        new Signup();
    }
}
class Bruger
{
    String brugerId,kode;

    Bruger(String b,String k)
    {
        brugerId = b;
        kode = k;

    }
    public String toString()
    {
        return brugerId+" "+kode;
    }
}


Nu bliver den ved med at spørge unden at stoppe når den rigtige bruger er tastet ind?
Avatar billede kama Nybegynder
03. april 2002 - 21:58 #2
Stopper den ikke ved Bo Hansen?
Du spørger kun på plads 0 i dit array. (int index = 0)
Avatar billede soelvpil Nybegynder
03. april 2002 - 22:00 #3
Så vidt jeg kan se er det fordi, du spørger om det er Bo (index er hele tiden 0).

Prøv i stedet noget a la

Map brugere = new HashMap();
brugere.put("Bo",new Bruger("Bo","Hansen"));brugere.put("Maria",new Bruger("Maria","Olsen"));
brugere.put("Søren",new Bruger("Søren","Petersen"));

din while løkke skal så i stedet være

while (!brugere.containsKey(name))
{
  ...
}
Avatar billede soelvpil Nybegynder
03. april 2002 - 22:01 #4
Map og HashMap ligger i java.util pakken
Avatar billede jakoba Nybegynder
03. april 2002 - 22:01 #5
i enhver løkke der gennemlløber et array bør du sørge for at stoppe når du har nået enden af det array:

      while( index<password.length() && !password[index].brugerId.equals(name))

men siden løkken ikke incrementerer variablen index gør det vel ikke så meget :-))

Jeg kender ikke pakken javagently; men kunne det være at du får linieskift eller carriage-return med forenden af den indtastede streng når du bruger d.getString(...) ?

mvh JakobA
Avatar billede jakoba Nybegynder
04. april 2002 - 00:24 #6
måske:

import javagently.*;
import java.io.*;

class Signup
{

    Signup()throws IOException
    {

        Bruger password[] = new Bruger[10];

        int index=0;

        password[0] = new Bruger("Bo","Hansen");
        password[1] = new Bruger("Maria","Olsen");
        password[2] = new Bruger("Søren","Petersen");

        Display d = new Display("Welcome to JAVA-Signup");

        d.prompt("Username","xxxx");

        d.prompt("Password","xxxx");

        String name="";
        String kode;

        boolean brugerOK = false;
        boolean brugerGavOp = false;

        while ( !brugerOk && !brugerGavOp ) {

            // her bør du sørge for begge felter er tomme.

            d.ready(" Tryk ready når de har indtastet \n");

            name = d.getString("Username");
            kode = d.getString("Password");
                      // bruger har indtaste noget, nu skal vi
                      // se om det står i listen
            index = 0;

            if name.equals("jeg opgiver") {
                    // du skal ALTID give folk en chance for at slippe væk
                brugerGavOp = true;
            } else {
                while( index<password.length && !password[index].brugerId.equals(name) )
                {
                    if (  password[index].brugerId.equals(name)
                      && password[index].kode.equals(kode)
                      ) {
                        brugerOK = true;
                    }
                    index += 1;
                }
            }
        }

    }
    public static void main(String[] aslan)throws IOException
    {
        new Signup();
    }
}
class Bruger
{
    String brugerId,kode;

    Bruger(String b,String k)
    {
        brugerId = b;
        kode = k;

    }
    public String toString()
    {
        return brugerId+" "+kode;
    }
}
Avatar billede greybeard Nybegynder
04. april 2002 - 00:39 #7
for(index=0;!password[index].brugerId.equals(name);index++)
      {
        if(password[index].brugerId.equals("stop")) break;

        d.ready(" Tryk ready når de har indtastet n");

        name = d.getString("Username");
        kode = d.getString("Password");

      }
Prøv istedet med:

      while(d.getString("Username") == null d.getString("Password") == null)
      {
        d.ready(" Tryk ready når de har indtastet n");
      }
      name = d.getString("Username");
      kode = d.getString("Password");
      int result = checkBruger();
      // gå videre på basis af result;

      int checkBruger(){
        for(index=0;!password[index].brugerId.equals(name);index++)
        {
          if(password[index].kode.equalskode))
            // password ok;
            return 0;
        else
            // Password forkert
            return 1;
        }
        // brugernavn findes ikke
        return 2;
      }
Avatar billede greybeard Nybegynder
04. april 2002 - 01:31 #8
import javagently.*;
import java.io.*;

class Signup
{

    String name;
    String kode;
    Bruger password[] = new Bruger[10];

    int index=0;
    int result;
   
     
      Signup()throws IOException
    {

      password[0] = new Bruger("Bo","Hansen");
      password[1] = new Bruger("Maria","Olsen");
      password[2] = new Bruger("Søren","Petersen");

      Display d = new Display("Welcome to JAVA-Signup");

      d.prompt("Username","xxxx");

      d.prompt("Password","xxxx");
           
      d.ready(" Tryk ready når de har indtastet n");

      do

      {
        name = d.getString("Username");
        kode = d.getString("Password");
        result = checkBruger();
        if (result == 1){
          d.ready(" Password forkert");
        }
        if (result == 2){
          d.ready(" Bruger ukendt");
        }
           
           
      }while (result != 0);
    }
     
    int checkBruger(){
      for(index=0; index < password.length ;index++)
      {
      if(password[index].kode.equals(kode))
          // password ok;
          return 0;
      else
          // Password forkert
          return 1;
      }
      // brugernavn findes ikke
      return 2;
    }
     
     
    public static void main(String[] aslan)throws IOException
    {
        new Signup();
    }
}

Det blev vist noget rod før.

Denne her virker
Avatar billede aslan Nybegynder
08. april 2002 - 19:25 #9
takker:) Undskyld jeg ikke fik svaret før , men jeg har altså lige været i udlandet :)
Avatar billede greybeard Nybegynder
08. april 2002 - 20:13 #10
Tak selv
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