2013-10-04 5 views
0

нужна помощь снова. Прости. как я могу удалить нулевые значения из моего массива? вот что я получил до сих пор.Как удалить нулевые значения/элементы из массива

int unikCount = 0; 
String c = " "; 
for (int i = 0; i < a.length; i++) { 
    for (int j = 0; j < a.length; j++) { 
     if (tempAry[i].equals(tempAry[j])) { 
      unikCount++; 
     } 
     if (unikCount > 1) { 
      tempAry[j] = c; 
      unikCount = 1; 

     } 

    } 
    unikCount = 0; 
} 
for (i = 0; i < a.length; i++) { 
    if (tempAry[i] != c) { 
     unikCount++; 
    } 

} 
System.out.println(unikCount); 

for (int i = 0; i < a.length; i++) { 
    for (int j = 1; j < a.length; j++) { 
     if (tempAry[i].equals(tempAry[j])) { 
      if (tempAry[i] == c) { 
       count++; 
       if (tempAry[j] != c) { 
        count++; 
        tempAry[j] = tempAry[i]; 

       } 
      } 
     } 
    } 

} 
count = 0; 
for (int i = 0; i < a.length; i++) { 
    System.out.println(tempAry[i]); 
} 

* удалить часть после "System.out.println (unikCount)". спасибо за наступающую помощь. кстати, не могу использовать хэш и arraylist.

+0

Есть ли причина, по которой вы не можете просто создать новый массив и скопировать ненулевые значения? –

+0

Вы хотите укоротить массив, объединив его, удалив ведра с нулевым значением в них? И есть ли причина, почему вы не используете список вместо массива? Списки легко управляют этим для вас. – Drizzt321

+0

Не используйте 'string' вместо' == 'вместо' String.equals() '. См. [Java String.equals versus ==] (http://stackoverflow.com/questions/767372/java-string-equals-versus) – Smit

ответ

2

Вы можете проверить null, как это:

if (null == someObject) 
{ 
    // do things 
} 

Там нет никакого способа, чтобы удалить элемент из массива и его сжиматься автоматически. Вам придется использовать временный массив для хранения значений, создания массива нового размера и переноса всех этих элементов.

Более эффективным способом было бы использовать List.

0

Посмотрите на вашу логику (с правильным отступом):

if(tempAry[i].equals(tempAry[j])) {      
    if(tempAry[i] == c) {   
     count++; 
     if(tempAry[j] != c) { 
      count++; 
      tempAry[j] = tempAry[i]; 

     } 
    } 
} 

Это не имеет никакого смысла. Почему вы проверите для tempAry[j] != cвнутриif(tempAry[i] == c) ???

Вместо этого вы использовали вместо этого if...else?

0
int j = 0; 
Object[] temp = new Object[a.length]; 
for (int i = 0; i < a.length; i++) { 
    if (a[i] != null) { 
     temp[j++] = a[i]; 
    } 
} 
Object[] newA = new Object[j]; 
System.arraycopy(temp, 0, newA, 0, j); 

Если массив является массивом, например, String, вы бы изменения курса «Объект» в «String». И если «null» означает пустую строку, то тест if будет соответствующим образом изменен.

Смежные вопросы