2016-02-15 6 views
-8
public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    int[] num=new int[] {1, 5, 0,2, 2, -3, 1, 10}; 
    Sample.getSocks(num); 
    } 


public static void getSocks(int[] integers) { 
int[] c=new int[integers.length]; 
int a=0; 
    for(int i=0;i<integers.length;i++) 
    { 
     int count=0; 
     for(int k=0;k<c.length;k++) 
     { 
      if(integers[i]==(c[k])) 
      { 
       count=1; 
      } 
     } 
     System.out.println("value"+integers[i]); 
     System.out.println(count); 
      if(count!=1) 
      { 
       c[a]=integers[i]; 
       a++; 
      } 

     } 

    System.out.println(java.util.Arrays.toString(c)); 
} 

выход для указанного выше кода: [1, 5, 2, -3, 10, 0, 0, 0]если условие становится истинным, даже если значения не равны

фактический выход я want is: [1, 5, 0, 2, -3, 10, 0, 0]

При сравнении значения 0 со значениями целочисленного массива C, если условие (if (0 == 1)) является становясь истинным каждый раз.

Может кто-нибудь объяснить, почему условие if становится истинным, даже если значения не равны?

+1

Вы смотрите на это неправильно. Вы должны спрашивать, что не так с вашим кодом (значения, очевидно, не то, что вы думаете, что они есть), а не предполагать, что сам java работает неправильно. Пройдите свой код и убедитесь сами. – tnw

+1

Использовать отладчик, так что вам надоело видеть, что эти «отладки моего кода для меня не работают» – redFIVE

+1

Непонятно, что должен делать этот код (исключить дубликаты?), Но причина, по которой 0 в позиции 3 не копируется к выходному массиву ясен - выходной массив уже содержит 0s (он содержит все 0s по умолчанию при его создании), поэтому 'if (integers [i] == (c [k])) истинно для хотя бы одного значение 'k'. – Eran

ответ

1

Ваш массив c пусто пытается это это дает тот же reuslt каждый раз:

if(integers[i]==(c[k])) 

Потому что вы всегда c[k] = 0

+0

, вероятно, потому, что вы всегда либо отвечаете на эти ужасные вопросы, либо просто набросаете ответы на демпинг кода ... и я не тот, кто ниспроверг вас FYI. Это только поощряет больше того же дерьма – redFIVE

+1

@redFIVE, причины, которые вы только что описали, не являются поводом для downvote - http://stackoverflow.com/help/privileges/vote-down – brso05

+0

Не меняет того факта, что его причина его получения downvoted. Кольцо Repwh * на таких вопросах заставляет людей думать, что нормально спросить мусор, как этот вопрос – redFIVE

2

Помните, что c начал заполняться нулями

Вы должны использовать:

for(int k=0;k<a;k++) 
    { 
     if(integers[i]==(c[k])) 
     { 
      count=1; 
     } 
    } 

вместо:

for(int k=0;k<c.length;k++) 
    { 
     if(integers[i]==(c[k])) 
     { 
      count=1; 
     } 
    } 
0

Целые массивы инициализировать как все нули. Вы получаете неправильный вывод, потому что, когда вы добираетесь до integers[2]==(c[k]), вы сравниваете 0 до 0 (это true) и устанавливаете счетчик равным 1, поэтому ваш код сообщает вам, что 0 уже существует и не добавляет его в список

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