正如@Darshan Mehta的回答所说,不允许使用负数作为数组索引。但是,您可以编写自己的数组类,允许使用负索引。
以下是我使用泛型的示例。
public class ModuloArray<E> {
int size;
E[] array;
public ModuloArray(int size) {
if (size <= 0)
throw new RuntimeException("not positive");
this.size = size;
array = (E[]) new Object[size];
}
public ModuloArray(E... elements) {
if (elements == null)
throw new RuntimeException("null");
this.size = elements.length;
array = elements;
}
public E get(int index) {
return array[Math.floorMod(index, size)];
}
public void set(int index, E element) {
array[Math.floorMod(index, size)] = element;
}
}
public class Main {
public static void main(String[] args) {
System.out.println("*** ModuloArray with first constructor ***");
ModuloArray<String> myArray = new ModuloArray<>(3);
myArray.set(-1, "apple");
myArray.set(-2, "orange");
myArray.set(-3, "banana");
System.out.println(myArray.get(-3));
System.out.println(myArray.get(-2));
System.out.println(myArray.get(-1));
System.out.println(myArray.get(0));
System.out.println(myArray.get(1));
System.out.println(myArray.get(2));
System.out.println();
System.out.println("*** ModuloArray with second constructor ***");
ModuloArray<String> myArray2 = new ModuloArray<>("glazed donut", "chicken burger", "apple soda");
System.out.println(myArray2.get(-2));
System.out.println(myArray2.get(3));
}
}
上面的例子输出:
*** ModuloArray with first constructor ***
banana
orange
apple
banana
orange
apple
*** ModuloArray with second constructor ***
chicken burger
glazed donut
Java中的数组索引仅在条件
0 <= index < array.length
为真时才有效。但是,因为
ModuloArray
使用
Math.floorMod(int x, int y)
来访问数组元素,因此任何整数
(包括负数)都可以用作有效索引。这种行为类似于Python中列表的索引工作方式。
Map<Integer, Integer>
然后... - buræquete