我正在尝试在C#WPF中执行此数组。在这部分代码中:
buttons[1, 0] = button2x1;
它抛出:
System.IndexOutOfRangeException错误。
但我不认为这是超出范围的。发生了什么事?
buttons = new Button[2, 2];
buttons[0, 0] = button1x1;
buttons[0, 1] = button1x2;
buttons[0, 2] = button1x3;
buttons[1, 0] = button2x1;
buttons[1, 1] = button2x2;
buttons[1, 2] = button2x3;
buttons[2, 0] = button3x1;
buttons[2, 1] = button3x2;
buttons[2, 2] = button3x3;
答案 0 :(得分:3)
数组(在C#中)是零索引,即你的第一个元素将在索引0,第二个在1,依此类推。声明数组时,声明期间提供的数字(新Button [2,2]中的2s)是数组可以容纳的元素数。考虑到它是基于0的索引,您的最高可能索引是声明的元素数量 - 1.有关数组的更多信息,请参阅msdn文档@ here。
在您的情况下,当您执行class ItemHandler extends DefaultHandler {
int idGiven = 101002;
String foundName = null;
private StringBuilder sb = new StringBuilder();
private String item_name;
private int item_id;
@Override
public void startElement(String uri, String localName, String qName, Attributes attr) {
sb.setLength(0); // Clear the buffer
}
@Override
public void characters(char[] buffer, int start, int length) {
sb.append(buffer, start, length);
}
@Override
public void endElement(String uri, String localName, String qName) {
switch(localName) {
case "id":
item_id = Integer.parseInt(sb.toString());
break;
case "name":
item_name = sb.toString();
break;
case "item":
if (item_id == idGiven) {
foundName = item_name;
}
break;
default:
System.err.println("Unexpected tag: "+localName);
}
sb.setLength(0); // Clear the buffer
}
}
时 - 您正在尝试访问超出范围的索引,因此出现错误(请注意您的代码段中还有4个其他语句会导致此错误)。如果您需要这样做,请将声明更改为包含3个元素而不是2个。
buttons[0, 2] = button1x3;
答案 1 :(得分:1)
请记住,对数组的访问是通过从零开始的索引,因此您无法访问索引 2 ,只能 0,1
答案 2 :(得分:1)
当您创建一个包含2个索引的数组时,它只允许您使用两个:0和1
你必须记住,索引0也算作1。
做你想做的事:
buttons = new Button [3,3];
buttons[0, 0] = button1x1;
buttons[0, 1] = button1x2;
buttons[0, 2] = button1x3;
buttons[1, 0] = button2x1;
buttons[1, 1] = button2x2;
buttons[1, 2] = button2x3;
buttons[2, 0] = button3x1;
buttons[2, 1] = button3x2;
buttons[2, 2] = button3x3;
是3个索引,0,1和2。