Я занимаюсь разработкой программы с обработкой 3 последних нескольких дней (с первого взгляда на обработку с момента вступления в компьютерную науку в 2009 году) и продолжал эту проблему :Встроенные переменные, непригодные для использования в некоторых случаях (Обработка 3)
public class PolarMap {
...
PVector[][] mapping = new PVector[width][height];
PVector[][] cartesian = new PVector[width][height];
PVector cart = new PVector();
PVector polar = new PVector();
/**
Maps every pixel on the cartesian plane to a polar coordinate
relative to some origin point.
*/
public void Map(float originX, float originY){
for (int x=0; x < width; x++){
for (int y=0; y < height; y++){
...
cart.add(x, y);
polar.add(r, theta);
mapping[x][y] = polar; ***
cartesian[x][y] = cart;
}
}
}
...
}
на одной линии с ***, я всегда получить массив Index Out Of Bounds выброшен. Я искал SO, Reddit и собственную документацию Processing, чтобы выяснить, почему. Если вы не знакомы с обработкой, ширина и высота - это как встроенные переменные, так и число пикселей, высокое и на вашем холсте, как указано в методе setup() (800x800 в моем случае). По какой-то причине оба массива не инициализировались этим значением - вместо этого они инициализировались значением по умолчанию для этих переменных: 100.
Итак, поскольку это не имело никакого смысла, но это было одно из тех случаев, попытался объявить новые переменные:
int high = height;
int wide = width;
и инициализировал массив этими переменными. И разве ты этого не знаешь, это решило проблему. Теперь у меня есть два массива 800x800.
Итак, вот мой вопрос: ПОЧЕМУ были встроенные переменные, которые не работали, как ожидалось, при инициализации массивов, но делали именно то, что они должны были использовать при назначении определенной переменной?
Инициализатор проблемных массивов и объявление рабочей переменной находятся в одной и той же области, далеко от метода setup() в основном классе. Однако ... Мне просто пришло в голову, что я кормлю карту (originX, originY) со значением, объявленным выше метода setup() в основном классе. Основываясь на том, что вы только что написали, я подозреваю, что это * было причиной моей проблемы. И, только что протестировав, вы абсолютно правы! Удивительно, спасибо! – pyansharp
@pyansharp Да, это не имеет никакого отношения к сфере видимости напрямую, это все в порядке событий. Один простой способ проверить это - добавить команды 'print()', чтобы увидеть, что происходит сначала, но в основном, если 'width' и' height' являются '100', тогда' size() 'еще не был вызван. –