2015-12-13 1 views
2

Я пытаюсь выполнить упражнение, в котором у меня есть некоторые задачи, включая этот: Печатать только кратные 3 в массиве Мне нужно использовать апплет, и я не использую его знайте, как это сделать. Я попытался установить состояние на графической части, но она возвращает не хороший 0Печатать только кратные 3 в массиве

public void init() { 
    dataList = new int[17]; 
    int dataList[] = {2,4,6,9,5,4,5,7,12,15,21,32,45,5,6,7,12}; 

    for (int i = 0; i < dataList.length; i++) { 
    //Compute the sum of the elements in the array. 
    sum += dataList[i]; 
    //Compute the product of the elements in the array. 
    product *= dataList[i]; 
    //Compute the frequency of the number 5 in the array 
    if (dataList[i] == 5) { 
     fiveCounter++; 
    } 
    } 
} 

public void paint(Graphics g) { 
    g.drawString(("Sum of elements is: " + sum), 25, 25); 
    g.drawString(("Product of elements is: " + product), 25, 50); 
    g.drawString(("Number 5 is present " + fiveCounter + " times"), 25, 75); 
    for (int i = 0; i < dataList.length; i++) { 
    if ((dataList[i] % 3) == 0) { 
     g.drawString((String.valueOf(dataList[i])), 25, 100); 
    } 
    } 
} 

в другой попытке, когда я попытался создать новый массив, основанный на вычислении числа значений кратного 3, программа не запускается и я получаю ArrayIndexOutOfBoundException

public void init() { 
    dataList = new int[17]; 
    multiple3 = new int[mult3Counter]; 
    int dataList[] = {2,4,6,9,5,4,5,7,12,15,21,32,45,5,6,7,12}; 

    for (int i = 0; i < dataList.length; i++) { 
    //Compute the sum of the elements in the array. 
    sum += dataList[i]; 
    //Compute the product of the elements in the array. 
    product *= dataList[i]; 
    //Compute the frequency of the number 5 in the array 
    if (dataList[i] == 5) { 
     fiveCounter++; 
    } 
    if ((dataList[i] % 3) == 0) { 
     multiple3[i] = dataList[i]; 
     mult3Counter++; 
    } 
    } 

public void paint(Graphics g) { 
    g.drawString(("Sum of elements is: " + sum), 25, 25); 
    g.drawString(("Product of elements is: " + product), 25, 50); 
    g.drawString(("Number 5 is present " + fiveCounter + " times"), 25, 75); 
    for (int i = 0; i < multiple3.length; i++) { 
    g.drawString((String.valueOf(multiple3[i])), 25, 100); 
    } 
} 

Как я могу решить эту проблему?

+0

Подсказка: сообщение об ошибке 'ArrayIndexOutOfBoundException' означает, что вы пытались перебрать индекс за длина вашего массива. Проблема здесь: 'for (int i = 0; i femmestem

+1

Нет. Это не проблема. Он будет выполнять итерацию, когда он проверяет __lesser than__ - not __lesser или equal__ –

+0

. Компилятор запускает здесь огонь: multiple3 [i] = dataList [i]; Я попробовал, как предложил Этуру Гуруге, не повезло. – JohnSnow

ответ

0

Я самостоятельно решал вопрос, изменяя код только в разделе «Графика». только некрасиво то, что я должен был повторить DataList как я не мог передать значение из метода инициализации:

public void paint(Graphics g) { 
    int dataList[] = {2,4,6,9,5,4,5,7,12,15,21,32,45,5,6,7,12}; 
    int yposition = 100; 

    g.drawString(("Sum of elements is: " + sum), 25, 25); 
    g.drawString(("Product of elements is: " + product), 25, 50); 
    g.drawString(("Number 5 is present " + fiveCounter + " times"), 25, 75); 
    g.drawString(("The following numbers are multiple of 3"), 25, yposition); 

    for (int i = 0; i < dataList.length; i++) { 
    if ((dataList[i] % 3) == 0) { 
     yposition += 15; 
     g.drawString((String.valueOf(dataList[i])), 25, yposition); 
    } 
    } 
} 
+1

Я ответил на заданный вами вопрос - __Принт только кратные 3 в массиве__ Мы не можем знать, что у вас на уме. Если вы спросите, как настроить свою позицию, когда происходит несколько из трех, мы ответим на это. –

1

Вы не можете использовать тот же счетчик для обоих массивов. Используйте два разных счетчика. Вы не можете использовать mult3Counter как размер массива multiple3, так как он не инициализирован! Следовательно, mult3Counter будет 0 по умолчанию. Поэтому, когда вы собираетесь получить доступ к multiple3[] с любым индексом, он даст ArayIndexOutOfBoundsException

Если вам нужно знать количество вхождений кратных 3, вам нужно дважды запустить цикл;

int mult3Counter = 0; 
for (int i = 0; i < dataList.length; i++) { 
    if ((dataList[i] % 3) == 0) { 
    mult3Counter++; 
    } 
} 

int j = 0; 
int [] multiple3 = new int[mult3Counter]; 

for (i = 0; i < dataList.length; i++) 
{ 
    if ((dataList[i] % 3) == 0) 
    { 
    multiple3[j++] = dataList[i]; 
    } 
} 

Или лучший способ заключается в использовании List (ArrayList) добавить кратные 3.

ArrayList<int> multiple3 = new ArrayList<>(); 

for (int i = 0; i < dataList.length; i++) { 
    if ((dataList[i] % 3) == 0) { 
    multiple3.add(dataList[i]); 
    } 
} 

Если вам нужен массив, вы можете преобразовать его в массив позже. Refer This Question

+0

Я пробовал в обоих направлениях, но они не работают. Второй способ дает ArayIndexOutOfBoundsException – JohnSnow

+0

вы правильно инициализировали 'mul3counter'? Посмотрите на ответ. Я обновил его! –

+0

У второго метода не может быть 'ArrayIndexOutOfBoundsException'. 'ArrayList' не имеют границ. –

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