я должен написать метод в Java, где наличие на входе массив a
чисел и номер x
возвращает массив элементов, который следует за последнее вхождение x
в a
.Индексирование В Java массивы
Например, при входе {0,1,2,3,4,5,6,7,8,9}
и x=6
метод должен возвращать {7,8,9}
того времени с {4,1,4,2}
и x=4
метод должен возвращать {2}
и если x
не в a
, то она должна возвращать пустой массив {}
(или массив с 0 длиной)
так что я получил этот ответ:
int idx = -1;
for (int i = 0; i < s.length; i++) {
if (s[i] == x)
idx = i;
}
/* After you found this index, create a new array starting
* from this element. It can be done with a second (not nested) for loop, or you can
* use Arrays.copyOfRange()
*/
//make sure idx != -1
int[] t = new int[s.length - idx - 1];
for (int i = idx + 1; i < s.length; i++)
t[i - idx - 1] = s[i];
, который был очень полезным, но я не мог понять, почему это работает: (РЕДАКТИРОВАНИЕ, Хорошо, теперь я понять, почему это работает, но даже если на мой взгляд, в сочетании для петли ideea был более менее сложным для чтения)
t[i - idx - 1] = s[i];
и это не делает:
int[] t = new int[a.length - indx - 1];
for (int j = indx + 1; j < a.length; j++) {
for (int i = 0; i < t.length; i++) {
t[i]=a[j];
}
}
return t;
Редакцией: Чтобы уточнить это все код
int[] dopoX(int[] a, int x) {
int n = a.length;
int[] c = new int[0];
int indx = 0;
int nrx = 0;
for (int j = 0; j < a.length; j++) {
if (a[j] == x)
nrx++;
if (a[j] == x)
indx=j;
}
if (nrx == 0)
return c;
int[] t = new int[n - indx - 1];
for (int j = indx + 1; j < n; j++) {
for (int i = 0; i < t.length; i++) {
t[i] = a[j]; /* it returns just 1 number of a[] like t{2,2,2,2,2,2,2,2} which is
not correct */
}
}
return t;
}
Может быть, потому, что последний фрагмент не использует 'idx' в любом случае. –
Вы хотите заполнить массив t одним значением s [i]? –
Как вы относитесь к i и j? Я должен изменить, как более подробно в массиве, – Sashwat