webForumDet fria alternativet

";;" Vad betyder detta??

18 svar · 501 visningar · startad av swange

swangeMedlem sedan aug. 200220 inlägg
#1

Någon som vet vad 2 ;; betyder i Java. Ex:

For (;;) {
bla...
bla...
bla...

Tacksam för svar....

// Stefan

BrimbaMedlem sedan dec. 19995 875 inlägg
#2

; är satsavgränsare.

Man kan skriva ett helt program på en rad, men för att göra det lite enklare att läsa brukar man dela upp det på lite fler rader.

swangeMedlem sedan aug. 200220 inlägg
#3

Jo, visst, Det är en satsavgränsare men det verkar som om man kan använda två stycken på rad i en forloop (;;), och då blir det någon slags operator eller Statement??

Eller?

Marcus EMedlem sedan maj 20021 466 inlägg
#4

Nej, for-loopen tar tre satser.
for(start statement; test statement; increase statement)

Du kan utelämna något av dessa, men du kan inte utlämna sats-avgränsarna. Därför är det godkänt, men inte rekommenderat, att använda for(;;).

Detta gäller för samtliga C-liknande språk (Java, C, C++, PHP etc.).

swangeMedlem sedan aug. 200220 inlägg
#5

Så med andra ord så kommer denna forloop bara köra och köra??!!

Marcus EMedlem sedan maj 20021 466 inlägg
#6

Japp, precis som while(true).

swangeMedlem sedan aug. 200220 inlägg
#7

Ok, tackar för hjälpen...

// Stefan

spangoMedlem sedan juni 20008 205 inlägg
#8

swange skrev:

Så med andra ord så kommer denna forloop bara köra och köra??!!

Fotnot: Ibland är det praktiskt att ha sådana loopar som man i stället avbryter med break. Så den _behöver_ inte snurra på för evigt.

BrimbaMedlem sedan dec. 19995 875 inlägg
#9

spango, när är det bättre att köra en for(;;) iställer för en

boolean bolCheck = true;
while(bolCheck)
...

SPiNMedlem sedan mars 20007 896 inlägg
#10

Eftersom att båda är loopar som rullar ända tills man manuellt avbryter dem ( Med break eller return ), så bör det inte vara någon skillnad på dem. Därmot kan du ju med for-loopen deklarera variabler som bara finns inom loopen ( I init-delen av for ) - och sedan tas bort efter loopen är klar.

for( String str = "SPiN"; ; ) {
     System.out.println( str );

     if( LALA == 1 )
          break;
}

Strängen str kommer efter att loopen avbrutits att tömmas från minnet. Tror jag, åtminstone - eftersom att den är en lokal variabel, som endast kan användas inom for-blocket.

spangoMedlem sedan juni 20008 205 inlägg
#11

Brimba skrev:

spango, när är det bättre att köra en for(;;) iställer för en

boolean bolCheck = true;
while(bolCheck)
...

Well... en del menar att det aldrig är bättre. Men ett exempel skulle kunna vara om det inte är helt praktiskt, logiskt eller snyggt att avbryta mellan två iterationer, ungefär så här:

FooServer server = new FooServer();
// Rulla på i all evighet och hämta in förfrågningar
for (;;){
    try {
        FooRequest request = server.fetchRequest();
        request.makeItHappen();
        request.finish();
        addLogEntry("Request served successfully: " + request);
    } catch (FatalFooBarException e){
        // rapportera fel, sluta snurra
        addLogEntry("PEBKAC error: " + e);
        break;
    }
}

Man kan ju förstås skriva om det så att man slipper break, men personligen tycker jag att det är krångligare att läsa:

FooServer server = new FooServer();
boolean everythingIsOk = true;
// Rulla på i all evighet och hämta in förfrågningar
while (everythingIsOk){
    try {
        FooRequest request = server.fetchRequest();
        request.makeItHappen();
        request.finish();
        addLogEntry("Request served successfully: " + request);
    } catch (FatalFooBarException e){
        // rapportera fel, sluta snurra
        addLogEntry("PEBKAC error: " + e);
        everythingIsOk = false; 
    }
}
Marcus EMedlem sedan maj 20021 466 inlägg
#12

Annars kan man kasta om det lite.

try {
   for (;;){
        FooRequest request = server.fetchRequest();
        request.makeItHappen();
        request.finish();
        addLogEntry("Request served successfully: " + request);
    }
} catch (FatalFooBarException e){
    // rapportera fel, sluta snurra
    addLogEntry("PEBKAC error: " + e);
}
BrimbaMedlem sedan dec. 19995 875 inlägg
#13

personligen tycker jag att en forloop som bygger på break borde vara förbjuden ;)
Att den sedan kan användas och även vara användbar är en helt annan sak, men lösningen i sig borde förbjudas :D

PeWMedlem sedan juni 200010 432 inlägg
#14

Brimba skrev:

personligen tycker jag att en forloop som bygger på break borde vara förbjuden ;)
Att den sedan kan användas och även vara användbar är en helt annan sak, men lösningen i sig borde förbjudas :D

Håller med Brimba ;)

Finns en längre diskussion om detta här ...
Men OK. Poängen är att man ska undvika break i loopar.. och för det mesta går det att bygga programstrukturen på ett renare sätt. Speciellt om man nästlar iterationer och kanske ställer svaga villkor på break. Anledningen är helt enkelt att det lätt blir svårt att avlusa logiska fel i stora programkonstruktioner.

ChainsawMedlem sedan sep. 20001 124 inlägg
#15

Hittade en liten kodsnutt som innehöll lite programerarhumor för någon dag sedan... Riktigt torrt. Om man tar två sådana här kodstycken och gnuggar mot varandra så kan man göra upp eld med dom. Frystorkade skämt.

#define ever ;;
...
for (ever) {
    ...
}
spangoMedlem sedan juni 20008 205 inlägg
#16

Barndvarning, Motorgåsen, brandvarning. ;)

För övrigt håller jag med Brimba. Man ska naturligtvis använda while (true) i stället!

JaarMedlem sedan juli 2001434 inlägg
#17

All användning av break och att kasta exceptions där det inte är nödvändigt bör undvikas enligt mig... break och framför allt continue är ju ett steg tillbaka mot GW Basics orginella kod:

10 if a > 5 goto 40
20 a = a + 1
30 goto 10
40 a = 100

= dålig programstil :D

BrimbaMedlem sedan dec. 19995 875 inlägg
#18

När vi ändå pratar gammal BASIC... låt mig ta en nubbevisa jag hörde härom helgen...

Melodi: Mors lilla olle

10 LET oss nu fatta i våra glas
20 INPUT en klunk utav det som där has
30 IF du fått nog THEN till 50 min vän
40 ELSE GOTO-baka till 10 igen
50 END

Det var bara jag och några andra datanissar som tyckte den var rolig iofs, men men :e

ChainsawMedlem sedan sep. 20001 124 inlägg
#19

Har sjungit den snapsvisan förut. Tyvärr är det en evighetsloop, och tack vare att den inte har någon som helst felhantering så upptäcker den inte när någon stackars student fått för mycket och däckar. Därför: använd vettig felhantering så minskar vi alkoholrelaterade problem här i samhället.

137 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)