2015-10-26 8 views
0

Хорошо, это, вероятно, встретит очень простой вопрос, но, честно говоря, я новичок в кодировании, и я столкнулся с кирпичной стеной здесь. Мне нужно вставить значение в массив, сдвинуть данные вправо и обновить размер массива. Профессор предоставил комментарии для нас, чтобы структурировать наш код, и у меня есть большая часть его, но эта последняя часть меня убивает. Может ли кто-нибудь помочь? Вот код (соответствующая часть находится под // значения вставки и сдвиг данных ... и т.д.):При полной ошибке с кодом обработки java-списка

public class List { 

    // Declare variables 
    private int size = 0; 
    private int maxSize = 100; 
    private int[] data; 
    Scanner keyboard = new Scanner(System.in); 

    // constructors 
    public List() { 
     data = new int[maxSize]; 
    } 

    public List(int maxSize) { 
     this.maxSize = maxSize; 
     data = new int[maxSize]; 
    } 

    // methods 
    // Adds a value into the array and updates the size 
    public boolean add(int value) { 
     if (size == maxSize) { 
      System.out.println("Cannot add value since the list is full"); 
      return false; 
     } 
     data[size] = value; 
     size++; 
     return true; 
    } 

    // add multiple values to the list obtained from the keyboard 
    public void addValues() { 
     // declare local variables 
     int count = 0; 

     System.out.println("Enter multiple integers separated by spaces"); 
     String line = keyboard.nextLine(); 
     Scanner scanLine = new Scanner(line); 
     try { 
      while (scanLine.hasNext()) { 
       data[size] = scanLine.nextInt(); 
       count++; 
       size++; 
      } 
     } catch (ArrayIndexOutOfBoundsException aiobe) { 
      System.out.println("Only " + count + " values could be added before the list is full"); 
      return; 
     } catch (InputMismatchException ime) { 
      System.out.println("Only " + count + " values could be added due to invalid input"); 
      return; 
     } 
    } 

    // This will print all the elements in the list 
    public void print() { 
     System.out.println(); 
     for (int i = 0; i < size; i++) { 
      System.out.print(data[i] + " "); 
     } 
     System.out.println(); 
    } 

    // This methods returns the index of the key value if found in the list 
    // and returns -1 if the key value is not in the list 
    public int find(int key) { 
     for (int i = 0; i < size; i++) { 
      if (data[i] == key) { 
       return i; 
      } 
     } 
     return -1; 
    } 

    // This methods deletes the given value if exists and updates the size. 
    public boolean delete(int value) { 
     int index = find(value); 
     if (index == -1) { 
      System.out.println("The specified value is not in the list"); 
      return false; 
     } 
     for (int i = index; i < size - 1; i++) { 
      data[i] = data[i + 1]; 
     } 
     size--; 
     return true; 
    } 

    // This methods inserts the value at the given index in the list 
    public boolean insertAt(int index, int value) { 
     // validate index value and insertability 
     if (index < 0 || index > size || size == maxSize) { 
      System.out.println("Invalid index or list is already full"); 
      return false; 
     } 
     // insert value and shift data to the right and update the size 

     return true; 
    } 

    // This method removes the value at given index and shifts the data as needed 
    public boolean removeAt(int index) { 
     if (index >= 0 && index < size) { 
      for (int i=index+1; i<size; i++) 
       data[i-1] = data[i]; 
      size--; 
      return true; 
     } 
     return false; 
    } 

    // This method sorts the values in the list using selection sort 
    public void sort() { 
     int temp; 
     for (int j=size; j>1; j--) { 
      int maxIndex = 0; 
      for (int i=1; i<j; i++) 
       if (data[maxIndex] < data[i]) 
        maxIndex = i; 
      temp = data[j-1]; 
      data[j-1] = data[maxIndex]; 
      data[maxIndex] = temp; 
     } 
    } 
} 

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

+3

Никто не только собирается сделать это для вас, пожалуйста, дайте нам знать, что вы пробовали и что не работает. – Thomas

+0

класс немного несовместим, add не добавляет новые значения, когда список заполнен. addValues ​​не заботится об этом. Что произойдет с переполнением при вызове insertAt и заполнением списка? Последний элемент выкинут? Как правило, это помогает большинству, если вы запишете, что такое решение (на словах, псевдо-код или что-то такое) - не пытайтесь решить проблему в начале кода, который вы напишете, тогда –

ответ

0

// значение вставки и сдвига данных вправо и обновить размер

// Я думаю, что размер глобально объявлен правильно?

размер ++;

for(int i=size - 1; i < 0; i--) { 
    data[i] = data[i - 1]; 
} 
data[index] = value; 

Если у вас есть максимальный размер также будет проверка на размер < = MaxSize. Надеюсь, это поможет

0

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

public boolean insertAt(int index, int value) { 
    // validate index value and insertability 
    if (index < 0 || index > 5) { 
    System.out.println("Invalid index or list is already full"); 
    return false; 
    } 
    // insert value and shift data to the right and update the size 

    for(int i=index;i<size;i++) { 
     data[++i] = data[i]; 
    } 
    data[index] = value; 

    return true; 
} 
0
public boolean insertAt(int index, int value) { 
     // validate index value and insertability 
     if (index < 0 || index > size || size == maxSize) { 
      System.out.println("Invalid index or list is already full"); 
      return false; 
     } 
     // insert value and shift data to the right and update the size 
      for (int i=size - 1; i > index; i--) 
      data[i+1] = data[i]; 
      data[index] = value 
      size++; 
     return true; 
    } 
+0

Можете ли вы добавить несколько комментариев, как это будет решить проблему? – Phani

+0

Я думаю, ваш профессор хочет, чтобы вы завершили функцию «insertAt». Это мой код –