mboost-dp1

Lidt mangel på JAVA forståelse


Gå til bund
Gravatar #1 - Qw_freak
1. jun. 2012 07:56
Hey, håber der er nogen der kan fortælle mig hvad der sker her:

mNetAttributes = new NetworkAttributes[ConnectivityManager.MAX_NETWORK_TYPE+1];


Det er en stump fra android systemet i filen:
frameworks/base/services/java/com/android/server/ConnectivityService.java
Linie: 281
Gravatar #2 - arne_v
1. jun. 2012 12:47
ConnectivityManager.MAX_NETWORK_TYPE

er en konstant

og koden laver et array af typen (reference til) NetworkAttributes med ConnectivityManager.MAX_NETWORK_TYPE elementer.
Gravatar #3 - Qw_freak
2. jun. 2012 17:19
okay, tak for det, hvad betyder +1 i enden?

Gravatar #4 - Windcape
2. jun. 2012 17:25
#3

hvad betyder +1 i følgende sætning:

2 + 1 = 3
Gravatar #5 - Qw_freak
2. jun. 2012 17:38
Windcape (4) skrev:
#3

hvad betyder +1 i følgende sætning:

2 + 1 = 3


Så det er bare en increment?

Gravatar #6 - Windcape
2. jun. 2012 17:40
#5

Nej, det er en addition. (Increment er +=, ikke +)
Gravatar #7 - Qw_freak
2. jun. 2012 18:07
Nice, tak for hjælpen... :)
Gravatar #8 - PoulErik
2. jun. 2012 18:21
Det kunne tænkes, at det var noget med at lave en custom network type, og så skal den have en ny ubrugt NETWORK_TYPE id/constant.
Gravatar #9 - arne_v
2. jun. 2012 19:42
ConnectivityManager.MAX_NETWORK_TYPE er vel bare den størst mulige netværks type.

Hvis det skal være et validt array index, så skal array dimensioneres til ConnectivityManager.MAX_NETWORK_TYPE+1 da Java arrays altid starter med element 0.
Gravatar #10 - Windcape
2. jun. 2012 19:46
#9

int[9] kan vel indeholde 9 elementer, og ikke 8?

Det er jo initialization af arrayet, og ikke accessing by index.
Gravatar #11 - PoulErik
2. jun. 2012 19:52
Windcape (10) skrev:
#9

int[9] kan vel indeholde 9 elementer, og ikke 8?

Det er jo initialization af arrayet, og ikke accessing by index.


Av for arne.
Gravatar #12 - arne_v
2. jun. 2012 19:53
#10

Jeg gentager med lidt fed:

ConnectivityManager.MAX_NETWORK_TYPE er vel bare den størst mulige netværks type.

Hvis det skal være et validt array index, så skal array dimensioneres til ConnectivityManager.MAX_NETWORK_TYPE+1 da Java arrays altid starter med element 0.
Gravatar #13 - PoulErik
2. jun. 2012 19:54
Jeg tror "vi" misforstod dit indlæg. Sorry.

av for Windcape og mig.
Gravatar #14 - Windcape
2. jun. 2012 19:58
#12

Men det ville jo være fjollet. I så fald er der jo mindst et null element i array'et, sandsynligvis på position 0, hvis folk agter at lave noget lign. dette her:

for (int i = 1; i <= ConnectivityManager.MAX_NETWORK_TYPE; i++

normalt ville man jo instantisere til ConnectivityManager.MAX_NETWORK_TYPE , og så tilgå sidste element via:

ConnectivityManager.MAX_NETWORK_TYPE-1

Og jeg tvivler på at Android kildekoden ville have sådanne fejl i.
Gravatar #15 - arne_v
2. jun. 2012 20:15
Windcape (14) skrev:
Men det ville jo være fjollet. I så fald er der jo mindst et null element i array'et, sandsynligvis på position 0, hvis folk agter at lave noget lign. dette her:


Windcape (14) skrev:
Og jeg tvivler på at Android kildekoden ville have sådanne fejl i.


Det er ikke en fejl.

At gøre det som du foreslår vil være en fejl.

Hvis ConnectivityManager.MAX_NETWORK_TYPE er navngivet rigtigt så skal det være den største valide netværks type. Og hvis man bruger netværks type som index, så ...

Og der forlyder ikke noget om at ConnectivityManager.MIN_NETWORK_TYPE er 1. Det er fri fantasi fra din side. Den kan sagtens være 0.


Gravatar #16 - PoulErik
2. jun. 2012 20:15
Windcape (14) skrev:
Men det ville jo være fjollet. I så fald er der jo mindst et null element i array'et, sandsynligvis på position 0, hvis folk agter at lave noget lign. dette her:

Alle elementer vil være null. - Vi har ikke set resten af koden.

Windcape (14) skrev:
#12
for (int i = 1; i <= ConnectivityManager.MAX_NETWORK_TYPE; i++
ConnectivityManager.MAX_NETWORK_TYPE , og så tilgå sidste element via:

ConnectivityManager.MAX_NETWORK_TYPE-1

Så flytter du jo de "normale/statiske" elementer.

- Det kommer vel an på hvad det skal bruges til.
Gravatar #17 - PoulErik
2. jun. 2012 20:31
Windcape (14) skrev:
... og så tilgå sidste element via:
ConnectivityManager.MAX_NETWORK_TYPE-1

Uanset om du starter med i=0 el. i=1, så vil det da være forkert.
Gravatar #18 - Windcape
2. jun. 2012 20:52
#17

Sidste eksempel var uden for et evt. loop
Gravatar #19 - ISCS
2. jun. 2012 21:11
Windcape (14) skrev:

normalt ville man jo instantisere til ConnectivityManager.MAX_NETWORK_TYPE , og så tilgå sidste element via:

ConnectivityManager.MAX_NETWORK_TYPE-1


Jeg ville være enig med dig hvis konstanten hed NETWORK_TYPES_SIZE eller lignende.

Hvis den højeste, altså MAX er 10, må arrayet givetvis være 11 {0-10} - Derfor skal det nye array være 10+1 for at de her NETWORK_TYPE s kan være deri.
Gravatar #20 - PoulErik
2. jun. 2012 21:13
Windcape (18) skrev:
#17

Sidste eksempel var uden for et evt. loop


ja ok.
Gravatar #21 - Emil Melgaard
3. jun. 2012 05:31
Man kan se de forskellige netværkstyper her:

http://androidxref.com/source/xref/frameworks/base...

De går fra -1 til 13, men -1 er TYPE_NONE så den har selvfølgelig ikke nogen NetworkAttributes.
Gravatar #22 - Spiderboy
3. jun. 2012 07:49
Så er det jo fuldstændigt som arne_v formodede.
Gravatar #23 - Qw_freak
3. jun. 2012 10:50
Spiderboy (22) skrev:
Så er det jo fuldstændigt som arne_v formodede.


Erfaring FTW... :)

Gravatar #24 - Windcape
3. jun. 2012 11:40
#23

Java's mangel på rigtige enums ftl. :p
Gravatar #25 - Corholio
3. jun. 2012 14:21
Windcape (24) skrev:
#23

Java's mangel på rigtige enums ftl. :p


Det vil jeg gerne lige have uddybet - java har haft enums siden 1.5?
Gravatar #26 - arne_v
3. jun. 2012 18:08
#24

Jeg vil faktisk mene at Java har mere rigtige enums end C/C++/C# har. En Java enum er ikke en camoufleret integer.
Gravatar #27 - Qw_freak
4. jun. 2012 11:17
Hvis ikke jeg har sagt det, så skal i tak for hjælpen, det er supernice at i gider... :)
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login