N
в main
не то же самое N
, что и в SomeClass
.
Это связано с концепцией объема.
N
в main
является локальным для этого метода. Другими словами, вне этого метода его не существует.
N
в классе SomeClass
- это переменная экземпляра. Если вы создаете экземпляр SomeClass
, он получает свою собственную версию N
, которая идет вместе с ним.
public class SomeClass {
private static int static_member;
private int instance_member;
public void instance_method() {
// this is completely different from the other
// local_variable in static_method()
int local_variable;
static_member = 1; // legal
SomeClass.static_member = 1; // legal
instance_member = 1 // legal
this.instance_member = 1 // legal
}
public static void static_method() {
// this is completely different from the other
// local_variable in instance_method()
int local_variable;
static_member = 1; // legal
SomeClass.static_member = 1; // legal
instance_member = 1 // not legal, in a static method, there is no instance
}
}
Просто потому, что у некоторой переменной одно и то же имя, если она находится в другой области видимости, это разные переменные.
Помните, что класс похож на шаблон для объектов. Вы создаете объект, создавая экземпляр класса.
Вам нужно создать экземпляр SomeClass
в main, а затем использовать его. Вам также нужно кое-как настроить значение N. Обычно это делается с помощью конструктора (специальной функции, которая отвечает за создание экземпляров классов). Вам также необходимо сделать isValid()
общедоступным методом вашего класса, чтобы его можно было вызывать вне вашего класса.
public class SomeClass {
public int[][] gridArray;
private int N;
public SomeClass(int N){
this.N = N;
this.gridArray = new int[N][N];
}
public boolean isValid(int i, int j){
if (i < 0 || i >= N || j < 0 || j >= N){
System.out.println(i + " and " + j + " and "+ N);
throw new IndexOutOfBoundsException();
} else{return true;}
}
public static void main(String[] args) {
SomeClass instance = new SomeClass(5);
instance.isValid(4,4);
}
}
Наконец, ваша логика верна, неверна. Если N
= 5, ваши проверки верхней границы позволят получить индекс 5
, но максимальный индекс равен 4
. Я также исправил это выше.
person
Jamie Cockburn
schedule
01.07.2014
isValid
? - person JohnnyAW   schedule 01.07.2014