2015-11-15 8 views
1

У меня есть ArrayList:Выполнение каждого массива целых чисел в определенном положении в ArrayList

ArrayList<Integer> list = new ArrayList<>(); 

И Array из Целые:

int[] x = {5, 10, 15, 20, 25}; 

Я хочу, чтобы выполнить каждый Array целых чисел в определенное положение ArrayList. Я пробовал следующий код, но он работает не так, как ожидалось!

public static void main(String[] args) { 
    // TODO code application logic here 
    for(int i = 1; i <= 30; i++) { 
     list.add(i); 
    } 

    for(int i = 0; i < list.size(); i++) { 
     System.out.print(i); 
     System.out.print(" , "); 
     System.out.print(number(i)); 
    } 
} 


private static long number(int pos) { 
    int y = 0; 
    return (long) pos/list.get(x[y]); 
} 

Выходной ток:

0 , 0 
1 , 0 
2 , 0 
3 , 0 
4 , 0 
5 , 0 
6 , 1 
7 , 1 
8 , 1 
9 , 1 
10 , 1 
11 , 1 
12 , 2 
. 
. 
. 

Ожидаемый результат (что-то подобное):

0 , 0 
1 , 0 
2 , 0 
3 , 0 
4 , 0 
5 , 5 
6 , 5 
7 , 5 
8 , 5 
9 , 5 
10 , 10 
11 , 10 
12 , 10 
. 
. 
. 

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

+0

Что вы хотите сделать? –

+0

Почему вы определяете переменную 'y' внутри' number', если она всегда равна 0? – Mibac

+0

@mibac Это самое близкое, что я мог бы получить. –

ответ

1

Я отвечу, как вы хотите, чтобы следить за тем, в вашем ожидаемого ответа, в первую очередь, когда вы говорите, list.get(x[y]) это дает вам list.get(5), который , как вы начали подсчитывать от не при заполнении списка, поэтому вы предпочли сделать один из двух вариантов:

1- расчислитесь е ром 0:

for(int i = 0; i < list.size(); i++) { 
. 
. 
} 

2- сделать прибудете линию с x[y]-1:

list.get(x[y] - 1); 

И в обоих случаях, когда вы хотите, чтобы получить результат, необходимо умножить его со значением индекса списка, который is x[y]:

private static long number(int pos) { 
    int y = 0; 
    return Math.round(pos/list.get(x[y]) * x[y]); 
} 
+0

Мне нравится тот факт, что метод '' 'number()' '' в вашем ответе близок к тому, что я пытался сделать. –

+0

@ M-Y большое спасибо и рад, что смогу помочь –

1

Я думаю, это потому, что y переменная внутри number метода всегда равен 0. Из-за этого number метод всегда возвращает pos/list.get(5). Вот почему 2-е число увеличивается, когда число делится на 6. Из того, что я заметил, ваш ожидаемый результат - это число, деленное на 1 округленное до ближайшего 5.

1

Что я предлагаю вам сделать, это сохранить переменную счетчика, чтобы проверить, число в массиве достигло или нет.

int []arr = {2, 5, 10, 15, 20, 30}; 

int size = arr[arr.length - 1]; 
ArrayList<Integer> list = new ArrayList(); 

int k = 0; 
for(int i = 0; i < size; ++i) 
{ 
    if(i == arr[k]) 
    k ++; 
    if(k == 0) 
    list.add(0); 
    else 
    list.add(arr[k - 1]); 
} 

for(int i = 0; i < size; ++i) 
    System.out.println(i + ", " + list.get(i)); 

Output: 
0, 0 
1, 0 
2, 2 
3, 2 
4, 2 
5, 5 
6, 5 
... 

private static long number(int pos) { 
    return list.get(pos); 
} 
+0

Спасибо, я просто ваш код и по какой-то причине он дает ошибку '' 'Исключение в потоке" main "java.lang.ArrayIndexOutOfBoundsException: -1'''. –

+0

@ M-Y Да, извините. Я обновил код, попробуйте сейчас. –

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