2013-11-21 3 views
1
        EDITED VERSION 

Мне нужно удалить дубликаты из массива для проекта. Я видел, что люди советуют использовать «набор», я не узнал об этом в своем классе, поэтому я не могу его использовать. Я спросил своего инструктора, и он указал мне в хорошем направлении. Это очень долго, но это связано только с множеством операторов печати, которые я использую, чтобы помочь мне понять, что делает код. (КОДА НА НОМЕРЕ). Я считаю, что есть проблема с введением в массив недубличного числа.Удаление дубликатов из массива без установки

       HERE IS MY OUTPUT 
LB: 0 
UB: 10 
PROBE: 5 
Value of Arrays: 0 
randomNumber:42 
LB: 6 
UB: 10 
PROBE: 8 
Value of Arrays: 0 
randomNumber:42 
LB: 9 
UB: 10 
PROBE: 9 
Value of Arrays: 0 
randomNumber:42 
LB: 10 
UB: 10 
PROBE: 10 
Value of Arrays: 0 
randomNumber:42 
Return False 
42 
0 
0 
0 
0 
0 
0 
0 
0 
0 
LB: 0 
UB: 10 
PROBE: 5 
Value of Arrays: 42 
randomNumber:75 
LB: 6 
UB: 10 
PROBE: 8 
Value of Arrays: 42 
randomNumber:75 
LB: 9 
UB: 10 
PROBE: 9 
Value of Arrays: 42 
randomNumber:75 
LB: 10 
UB: 10 
PROBE: 10 
Value of Arrays: 0 
randomNumber:75 
Return False 
42 
75 
42 
42 
42 
42 
42 
42 
42 
42 
LB: 0 
UB: 10 
PROBE: 5 
Value of Arrays: 75 
randomNumber:74 
LB: 0 
UB: 4 
PROBE: 2 
Value of Arrays: 75 
randomNumber:74 
LB: 0 
UB: 1 
PROBE: 0 
Value of Arrays: 42 
randomNumber:74 
LB: 1 
UB: 1 
PROBE: 1 
Value of Arrays: 75 
randomNumber:74 
Return False 
42 
75 
74 
75 
75 
75 
75 
75 
75 
75 
LB: 0 
UB: 10 
PROBE: 5 
Value of Arrays: 75 
randomNumber:100 
LB: 6 
UB: 10 
PROBE: 8 
Value of Arrays: 75 
randomNumber:100 
LB: 9 
UB: 10 
PROBE: 9 
Value of Arrays: 75 
randomNumber:100 
LB: 10 
UB: 10 
PROBE: 10 
Value of Arrays: 0 
randomNumber:100 
Return False 
42 
75 
75 
100 
75 
75 
75 
75 
75 
75 
LB: 0 
UB: 10 
PROBE: 5 
Value of Arrays: 100 
randomNumber:68 
LB: 0 
UB: 4 
PROBE: 2 
Value of Arrays: 75 
randomNumber:68 
LB: 0 
UB: 1 
PROBE: 0 
Value of Arrays: 42 
randomNumber:68 
LB: 1 
UB: 1 
PROBE: 1 
Value of Arrays: 75 
randomNumber:68 
Return False 
42 
75 
75 
100 
68 
100 
100 
100 
100 
100 
LB: 0 
UB: 10 
PROBE: 5 
Value of Arrays: 100 
randomNumber:7 
LB: 0 
UB: 4 
PROBE: 2 
Value of Arrays: 75 
randomNumber:7 
LB: 0 
UB: 1 
PROBE: 0 
Value of Arrays: 42 
randomNumber:7 
Return False 
42 
75 
75 
75 
100 
7 
100 
100 
100 
100 
LB: 0 
UB: 10 
PROBE: 5 
Value of Arrays: 100 
randomNumber:29 
LB: 0 
UB: 4 
PROBE: 2 
Value of Arrays: 75 
randomNumber:29 
LB: 0 
UB: 1 
PROBE: 0 
Value of Arrays: 42 
randomNumber:29 
Return False 
42 
42 
75 
75 
75 
100 
29 
100 
100 
100 
LB: 0 
UB: 10 
PROBE: 5 
Value of Arrays: 75 
randomNumber:39 
LB: 0 
UB: 4 
PROBE: 2 
Value of Arrays: 42 
randomNumber:39 
LB: 0 
UB: 1 
PROBE: 0 
Value of Arrays: 42 
randomNumber:39 
Return False 
42 
42 
42 
75 
75 
75 
100 
39 
100 
100 
LB: 0 
UB: 10 
PROBE: 5 
Value of Arrays: 75 
randomNumber:74 
LB: 0 
UB: 4 
PROBE: 2 
Value of Arrays: 42 
randomNumber:74 
LB: 3 
UB: 4 
PROBE: 3 
Value of Arrays: 42 
randomNumber:74 
LB: 4 
UB: 4 
PROBE: 4 
Value of Arrays: 75 
randomNumber:74 
Return False 
42 
42 
42 
42 
75 
75 
75 
100 
74 
100 
LB: 0 
UB: 10 
PROBE: 5 
Value of Arrays: 75 
randomNumber:42 
LB: 0 
UB: 4 
PROBE: 2 
Value of Arrays: 42 
randomNumber:42 
LB: 0 
UB: 10 
PROBE: 5 
Value of Arrays: 75 
randomNumber:67 
LB: 0 
UB: 4 
PROBE: 2 
Value of Arrays: 42 
randomNumber:67 
LB: 3 
UB: 4 
PROBE: 3 
Value of Arrays: 42 
randomNumber:67 
LB: 4 
UB: 4 
PROBE: 4 
Value of Arrays: 75 
randomNumber:67 
Return False 
42 
42 
42 
42 
75 
75 
75 
75 
100 
67 
LB: 0 
UB: 10 
PROBE: 5 
Value of Arrays: 75 
randomNumber:30 
LB: 0 
UB: 4 
PROBE: 2 
Value of Arrays: 42 
randomNumber:30 
LB: 0 
UB: 1 
PROBE: 0 
Value of Arrays: 42 
randomNumber:30 
Return False 
42 
42 
42 
42 
75 
75 
75 
75 
75 
100 
           HERE IS MY CODE 

public class BinarySearch3{ 
    public static boolean binarySearch(int[] Arrays, int randomNumber){ 
     int LB = 0;//declare the lower bound 
     int UB = 10;//declare the upper bound 
     int probe = (LB + UB)/2;//calculate the probe 
     while(LB <= UB){ 
      System.out.println("LB: " + LB); 
      System.out.println("UB: " + UB); 
      System.out.println("PROBE: " + probe); 
      System.out.println("Value of Arrays: " + Arrays[probe]); 
      System.out.println("randomNumber:" + randomNumber); 
      //if the number is found return true 
      if(Arrays[probe] == randomNumber) 
       return true; 
      // if the probe is less than the number you want to find make LB 
      // the probe + 1. Cutting the list in half 
      if(Arrays[probe] < randomNumber) 
       LB = probe + 1; 
      // if the probe is more than the number you want to find make UB 
      // the probe - 1. Cutting the list in half 
      else if(Arrays[probe] > randomNumber) 
       UB = probe - 1; 
      probe = (LB + UB)/2;//recalculate probe 
     } 
     // the number was not found 
     System.out.println("Return False"); 
     return false; 
    } 

    public static void main(String [] args){ 
     int Arrays[] = new int [11]; 
     //Check the array 
     int randomNumber = 0; int d=0 ; 
     while(d < Arrays.length){ 
      sort.sorting(Arrays); 
      do{ // loop until randomNumber not found in array 

       randomNumber = (int) (Math.random() * 100) + 1; 
      } while(binarySearch(Arrays, randomNumber) == true); 
      Arrays[d] = randomNumber; 
      d++; 
      for(int k = 0; k < Arrays.length-1; k++) { 
       System.out.println(Arrays[k]); 
      } 
     } 
    } 
} 
+4

это 'если (DUP = ложь)' 'должно быть, если (! DUP)' или 'если (DUP == ложь)' –

+0

Он по-прежнему печатает одно случайное число в 10 раз. –

+0

См. Мой отредактированный ответ. Также используйте некоторую среду IDE, которая позволяет отлаживать ваше приложение, и будет намного проще найти эти простые проблемы. –

ответ

1

Один знак равенства означает присвоение значения.

это if(dup = false) должно быть if(!dup) или if(dup == false)

Другое дело в вашем коде является то, что вы создаете переменную boolean test = true; , и вы никогда не измените его. Таким образом, во второй итерации он ничего не будет делать, потому что ваш статус равен while(!test)

Вам необходимо немного улучшить код, чтобы выполнить его правильно.

0

Я не пошел через логику кода полностью, но вот несколько ошибок, которые я нашел,

1. если (DUP = истина) { г = (INT) (Math.random () * 10) + 1; }
прочее if (dup = false) { [x] = z;
}

Здесь вы присваиваете значения, а не сравниваете, используйте '==' для сравнения.

2. в то время как (! Тест) Здесь, так как тест установлен верно, прежде чем, он никогда не будет идти внутри время, как условие будет оцениваться по ложному

+0

Когда я добавляю второй, я должен изменить «test = false» внутри цикла, чтобы проверить = true. Правильно? –

1

Я бы предложил сделать бинарный поиск это собственная функция, это отделяет построение массива от двоичного поиска. Это упрощает чтение и тестирование, а бинарный поиск можно использовать повторно.

public class work_on_it{ 
    public static boolean binarySearch(int[] array, int z){ 
     int LB = 0;//declare the lower bound 
     int UB = array.length - 1;//declare the upper bound 
     int probe = (LB + UB)/2;//calculate the probe 
     while(LB <= UB){ 
      //if the number is found return true 
      if(array[probe] == z) 
       return true; 
      // if the probe is less than the number you want to find make LB 
      // the probe + 1. Cutting the list in half 
      if(array[probe] < z) 
       LB = probe + 1; 
      // if the probe is more than the number you want to find make UB 
      // the probe - 1. Cutting the list in half 
      else if(array[probe] > z) 
       UB = probe - 1; 
      probe = (LB + UB)/2;//recalculate probe 
     } 
     // the number was not found 
     return false; 
    } 

    public static void main(String [] args){ 
     // array length = LENGTH, array values in (1,...,RANGE) 
     int LENGTH = 11, RANGE = 50; 
     int[] array = new int [LENGTH]; 
     // fill array with MAX_VALUE. Ensures unassigned elements last after sort. 
     Arrays.fill(array, Integer.MAX_VALUE); 

     int z = 0, x = 0; 
     while(x < array.length){ 
      Arrays.sort(array); 
      do{ // loop until z not found in array 
       z = (int) (Math.random() * RANGE) + 1; 
      } while(binarySearch(array, z) == true); 
      array[x++] = z; 
     } 

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

Спасибо, это немного помогло. Похоже, вы находите дубликаты в массиве и печатаете их. Я хочу, чтобы программа создавала массив без дубликатов. Знаете ли вы, почему, если я изменяю true в этом (while (binarySearch (array, z) == true);) к false, почему он дает бесконечный цикл. Это те изменения, которые я сделал. –

+0

См. Отредактированный оригинальный код в верхней части для моих прав. –

+0

Думаю, я не понимаю, что вы делаете, или вы не поняли мой код. В приведенном выше коде создается массив уникальных случайных чисел, а затем выводится готовый массив. Вы пытались запустить его? – bcorso

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