public int[] board1 = new int [20];
Это определенная переменная. Также влияет ли значение 1 на этот код?
for (int i=-1;i<2;i++)
board1[i]=1;
Arrays.fill(board1, 1)
- не знаю, что вы пытаетесь сделать с for-loop
, но я уверен, что он сломается.
Я не понимаю вопроса. Но for (int i=-1;i<2;i++) board1[i]=1;
обязательно поставит ArrayIndexOutOfBoundsException
.
Кажется, у вас есть некоторые неправильные представления о массивах. Как вы придумали цикл for? Вы можете прочитать docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html
«Влияет ли значение 1 на этот код?» Что вы имеете в виду?
Я опубликовал задание, которое дал мне учитель, если это поможет.
Итак, вам дали цикл for с заведомо неправильными границами, и вам нужно найти правильные?
Изображения текста не очень хорошо воспринимаются здесь. Пожалуйста, отредактируйте вопрос еще раз, заменив изображение реальным текстом. Используйте копирование и вставку для обеспечения точности. И укажите, какие это строки 22 и 25.
Кажется, вы запутались в границах массива. Я не знаю, есть ли у вас опыт работы с другими языками (например, C), где это невозможно, но в Java размер массива хранится как член, поэтому для перебора элементов массива мы можем сделать это так:
int[] foo; //foo is just an array. this works for arrays of any type
// but i've just written 'int' because that's what you're using
for (int i = 0; i < foo.length; i++) {
foo[i] = 1; //we can set the value of the array at all points
}
... и это будет работать для всех массивов, потому что все они начинаются с 0
и заканчиваются .length - 1
Существует также синтаксис for-each, но его нельзя использовать для изменения массива (если только массив не принадлежит к классу, у которого есть методы для изменения его внутреннего состояния).
for (int x: foo) {
System.out.println(x); //this will print each element of 'foo' in order,
//but the variable within this loop, x, is a shallow copy of that element of foo,
// so we cannot mutate it
}
наконец, как уже упоминали другие, есть Arrays.fill()
. Это делает то же самое, что и цикл, но аккуратно упаковывает его в один вызов метода. Используете вы это или нет, зависит от стиля и вкуса (у меня были работы, где они не хотели, чтобы мы это использовали, но лично я предпочитаю это).
Если вам нужно установить массив быстрее и вы хотите, чтобы JVM и компилятор использовали для этого специальные инструкции ЦП, возможно, это можно сделать, но в большинстве случаев лучше использовать одну из трех показанных мной форм. .
Большинство сред Java основаны на OpenJDK, а не на GNU Classpath. Но смотреть исходный код в любом случае бессмысленно, как объясняется здесь. Короче говоря, просто используйте Arrays.fill(…)
. В худшем случае он делает то же самое, что и цикл, но все же проще и может быть даже быстрее. Я не знаю, каким должно быть третье решение, когда вы говорите «используйте одну из трех форм, которые я показал». В вашем ответе есть только два варианта сделать то, о чем просил вопрос.
Разве вам не нужно будет перебирать весь массив? Итак,
i = 0
иi < arraylength
.