Avatar billede kernelx Juniormester
16. januar 2008 - 13:19 Der er 5 kommentarer og
1 løsning

problemer med while

Hi,

er der en som kan finde min tanke-fejl i følgende code?
...
package testing.while;

public class TestWhile {
    public static void main (String[] args) {
        try {
            System.out.println( "return value: "+TestWhile.doLoop( "testValue" ) );
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
   
    public static String doLoop(String data) {
        try {
            String responseString = "";
            int counter = 0;
            while( true ) {
                String nextString = null;
                if (counter == 0) {
                    counter++;
                    nextString = data+counter;
                } else {
                    nextString = null;
                }
               
                if ( nextString.equals("") || nextString==null ) {
                    System.out.println( "before break: "+responseString );
                    break;
                }
               
                responseString = responseString+nextString;
                System.out.println( "new String: "+responseString );
            }
           
            return responseString;
        } catch(Exception e) {
            return e.getMessage();
        }
    }
}

...

output:
new String: testValue1
return value: null

Jeg vil gerne have programmet til, at den også skriver
  testValue1
ind i return.

Hvorfor laver programmet ikke noget System.out.println inden for if( nextString.equals("") || nextString==null )
?

Hvorfor er responseString efter while-loop' null?

med venlig hilsen
KernelX
Avatar billede erikjacobsen Ekspert
16. januar 2008 - 13:28 #1
Du skal jo nok bytte om på
      if ( nextString.equals("") || nextString==null ) {
så det bliver
      if ( nextString==null || nextString.equals("") ) {
Avatar billede nielle Nybegynder
16. januar 2008 - 13:30 #2
Med denne kode:

...
                if (counter == 0) {
                    counter++;
                    nextString = data+counter;
                } else {
                    nextString = null;
                }
               
                if ( nextString.equals("") || nextString==null ) {
                    System.out.println( "before break: "+responseString );
                    break;
                }
...

vil din while kun køre to gange:

1. counter er 0 og den tælles derfor op til 1.

2. counter er 1 og derfor sættes nextString og derfor breakes den.

Hvis den kun køre en gang - hvorfor så overhovedet have en while?

I øvrigt sakl denne:

                if ( nextString.equals("") || nextString==null ) {

rettes til:

                if ( nextString==null || nextString.equals("") ) {

Tjek altid på om den er null før at du begynder at bruge den som noget som ikke er null. Ellers får du en null-exception.
Avatar billede kernelx Juniormester
16. januar 2008 - 13:36 #3
ok, mange tak!
husk at skrive et eller andet som svar.

-Hvis den kun køre en gang - hvorfor så overhovedet have en while?
det er kun i dette eksempel sådan. i selve programmet som skal laves, er
nextString = bufferedReader.readLine() osv.
men den komplette code ville være alt for lang - og jeg er bange for at ingen vil svare på spørgsmål, hvis de først skal arbejde sig igennem kilometerlang code, hvis selve problet kan pakkes i et simpelt program.
Avatar billede kernelx Juniormester
16. januar 2008 - 13:36 #4
problet = problemet
Avatar billede erikjacobsen Ekspert
16. januar 2008 - 13:39 #5
nextString.equals("") vil give dig en nullpointer exception når nextString er null. Derfor test på null først. Jeg samler slet ikke på point, tak.

Jeg synes det er fint du kommer med et eksempel, der er kogt ned til det essentielle ;)
Avatar billede kernelx Juniormester
16. januar 2008 - 15:57 #6
lukket
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