2017-10-21 45 views
-1
int[] arr = new int[5]; 
    arr[0] = 23; 
    arr[1] = 123; 
    arr[2] = 255; 

    printArray(arr); 
} 

static void printArray(int...arr) { 
    for (int T : arr) 
     System.out.println(T); 
} 

: Affiche ceComment faire pour que mon tableau int non rempli n'imprime pas 0?

23 
123 
255 
0 
0 

Alors, comment éviter pas l'impression d'éléments non remplis, s'il vous plaît?

+3

Ces positions ne sont pas non remplis - ils contiennent '0' . –

+0

'int [] arr = nouveau int [3];'? –

Répondre

1

Les primitives dans Java ne sont pas Nullable. Lorsque vous créez un nombre entier primitif et que vous ne lui attribuez pas de valeur, it will default to 0.

Vous peut faire un tableau de Integer s qui sont annulable et puis utilisez un si pour voir si elles sont nulles comme ceci:

public static void main(String[] args) { 
    Integer[] arr = new Integer[5]; 
    arr[0] = 23; 
    arr[1] = 123; 
    arr[2] = 255; 

    printArray(arr); 
} 

public static void printArray(Integer... arr){ 
    for(Integer t : arr) { 
     if (t != null) { 
      System.out.println(t); 
     } 
    } 
} 
+1

Notez que l'utilisation de 'Integer' au lieu de' int' est un énorme inconvénient de performance. Cependant, il n'y a pas d'autre moyen de savoir si une valeur a été définie. Sauf qu'on peut choisir une valeur spéciale qui ne peut pas apparaître dans l'application. Par exemple un '-1' ou plus. Ensuite, on peut initialiser le tableau avec '-1' au lieu de' 0' comme 'Arrays.fill (array, -1);' et coller avec 'int'. – Zabuza

+1

@Zabuza Bon à signaler, mais je me demande à quelle échelle cela deviendrait perceptible. Et si l'opération de 'Arrays.fill()' supprimerait le surcoût d'utiliser une primitive encadrée. – Ivar

+0

Oui. Il serait probablement préférable d'utiliser '0' comme * valeur magique * pour le' int [] 'et si un '0' est valide dans l'application, alors mettez-le comme' -1' (la * valeur magique * ne peut pas se produire) dans le tableau. Par cela vous pouvez utiliser l'initialisation par défaut avec '0' efficacement en utilisant une autre * valeur d'indicateur *. Nécessite un wrapper de méthode pour les accès 'get' et' set' mais pour les gros volumes de données cela pourrait devenir favorable. – Zabuza