2011-11-20, 12:36
  #1
Medlem
ihavesoldouts avatar
Ja, vad menas med "? -1 : 0"

Till exempel:

int n = b[row][col] ? -1 : 0;
Citera
2011-11-20, 12:48
  #2
Medlem
rjonssons avatar
Citat:
Ursprungligen postat av ihavesoldout
Ja, vad menas med "? -1 : 0"

Till exempel:

int n = b[row][col] ? -1 : 0;

Om uttrycket b[row][col] är true så blir n -1, annars blir det 0.
Googla på ternary operator
http://www.devdaily.com/java/edu/pj/pj010018
Citera
2011-11-20, 21:56
  #3
Medlem
Citat:
Ursprungligen postat av ihavesoldout
Ja, vad menas med "? -1 : 0"

Till exempel:

int n = b[row][col] ? -1 : 0;

samma som

int n;
if(b[row][col]) {
n= -1;
} else {
n=0:
}
Citera
2011-11-21, 22:48
  #4
Medlem
Det går givetvis att skriva en if/else, men det här är ett kortare och lite mindre "pratigt" sätt att göra det på.
Citera
2011-11-21, 22:59
  #5
Medlem
Snuggles88s avatar
Lite offtopic kanske, men jag tycker den ternära opperatorn är mer användbar i C där allt som inte är 1 räknas som false. Då kan man använda den när man t.ex. vill sätta en variabel till en annan variabel men inte är säker på om den andra variabeln är satt.

T.ex. såhär:
Kod:
int j;
int i : -1

Finns det något liknande enkelt sätt att göra samma sak i java?
Citera
2011-11-22, 08:27
  #6
Medlem
cenobites avatar
Citat:
Ursprungligen postat av Snuggles88
Lite offtopic kanske, men jag tycker den ternära opperatorn är mer användbar i C där allt som inte är 1 räknas som false. Då kan man använda den när man t.ex. vill sätta en variabel till en annan variabel men inte är säker på om den andra variabeln är satt.

T.ex. såhär:
Kod:
int j;
int i : -1

Finns det något liknande enkelt sätt att göra samma sak i java?

Det där är inte alls bra, och kommer att ställa till en helvetes massa problem.

För det första så gäller att allt som inte är 0 är true, och 0 är false i C.

För det andra så kan du inte veta vad j kommer att vara i ditt exempel. Det beror på kompilator och om var variablen allokeras. Det aldra värsta är att värdet på j kan ändras mellan olika körningar och därigenom skapa oförutsägbara fel.

I java initialiseras alla variabler till ett förutbestämt värde om inget annat anges (0, false eller null). Alltså vet du alltid att variablen har blivit satt till någonting, och behöver inte kolla det runtime.
Citera
2011-11-22, 13:12
  #7
Medlem
Citat:
Ursprungligen postat av cenobite
I java initialiseras alla variabler till ett förutbestämt värde om inget annat anges (0, false eller null). Alltså vet du alltid att variablen har blivit satt till någonting, och behöver inte kolla det runtime.
Det där stämmer väl ändå bara medlemsvariabler, och inte lokala variabler som i TS exempel?
Och jag är inte säker, men detta gäller väl även medlemsvariabler i C++ och C (struct)?
Citera
2011-11-22, 22:05
  #8
Medlem
cenobites avatar
Citat:
Ursprungligen postat av zikac
Det där stämmer väl ändå bara medlemsvariabler, och inte lokala variabler som i TS exempel?
Och jag är inte säker, men detta gäller väl även medlemsvariabler i C++ och C (struct)?
Det har du ju faktiskt rätt i. Skillnaden mellan java och C är att i java får du ett compile-time error om du använder en variabel som inte initialiserats, det får du inte i C.

I vilket fall som helst så var inlägget som jag svarade på både felaktigt och innehöll dålig kod som inte bör användas. Skriver man bra kod behöver man inte fundera på vad variabler initialiseras till default, utan man ser till att de har det värde som man vill att de ska ha.
__________________
Senast redigerad av cenobite 2011-11-22 kl. 22:11.
Citera
2011-11-23, 09:51
  #9
Medlem
Är medlemsvariablerna statiska så initieras de givetvis. Om du initierar objektet så kommer alla instansvariabler också initieras.

Försöker du komma åt en icke-statisk instansvariablel/metod från en statisk metod så kommer IDE:et (Eclipse, IntelliJ, vad man nu använder) att ge ett fint felmeddelande.
Citera
2011-11-25, 13:29
  #10
Medlem
Anledningen till att snuggles88'as kod är felaktig beror på att talet j kommer att ha ett skärpvärde (det värdet som låg på minnesplatsen innan j tog över den). Att den inte får värdet 0 är för att C är gjort för att vara optimerat och utan onödiga operationer (att ge den värdet 0 drar ju processortid).
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in