【发布时间】:2023-03-19 11:48:01
【问题描述】:
我写了一个代码来计算一些权重。它们是整数权重。 每次单击按钮时我都需要保存它们。 请帮我。当我第二次尝试按下按钮时,我不明白为什么编译器会给我一个错误。这是我的完整代码:
public class TrainingActivity extends Activity {
private EditText etIn1, etIn2, etDesired;
private TextView prevInput;
int W[][] = new int[2][];
int X[][] = new int[30][];
int w0=0, w1=0, w2=0, p=1, sum=0, clicks=0;
private Button nxtData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.training_activity);
View backgroundImage = findViewById(R.id.background);
Drawable background = backgroundImage.getBackground();
background.setAlpha(40);
etIn1= (EditText) findViewById(R.id.etInput1);
etIn2 = (EditText) findViewById(R.id.etInput2);
etDesired = (EditText) findViewById(R.id.etDesired);
prevInput = (TextView) findViewById(R.id.prevInput);
nxtData = (Button) findViewById(R.id.nextData);
nxtData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
int sum = 0;
++clicks;
int intetIn1 = Integer.parseInt(etIn1.getText().toString());
int intetIn2 = Integer.parseInt(etIn2.getText().toString());
int intetDesired = Integer.parseInt(etDesired.getText().toString());
X[clicks-1] = new int[] {intetIn1, intetIn2, 1};
prevInput.setText("Last Inputs: (" + intetIn1 + ", " + intetIn2 +
", " + intetDesired + ")");
if(clicks == 1) {
if(intetDesired == 1) {
W[0] = new int[] {intetIn1, intetIn2, 1};
W[1] = W[0];
} else if(intetDesired == (-1)){
W[0] = new int[] {-intetIn1, -intetIn2, -1};
W[1] = W[0];
}
} else if(clicks > 1) {
for(int i=0; i<3; i++){
sum = sum + W[clicks-1][i] * X[clicks-1][i];
} if(sum>0 && intetDesired==1) {
W[clicks] = W[clicks-1];
} else if(sum<0 && intetDesired==(-1)) {
W[clicks] = W[clicks-1];
} else if(sum<=0 && intetDesired==1) {
for(int i=0; i<3; i++) {
W[clicks][i] = W[clicks-1][i] + X[clicks-1][i];
}
} else if(sum>=0 && intetDesired==(-1)) {
for(int i=0; i<3; i++) {
W[clicks][i] = W[clicks-1][i] - X[clicks-1][i];
}
}
}
etIn1.setText("");
etIn2.setText("");
etDesired.setText("");
}
});
}}
这是它抛出的异常:
java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
更新EEEEEEEE 我通过将 W[2][] 更改为 W[20][] 解决了 arrayindexoutofboundexception 的问题。但在某些点击中它给了我这个错误:
java.lang.NullPointerException
目前还不清楚是哪些点击。有时它在第二次点击中。或者有时是第四次点击。请帮忙。
【问题讨论】:
-
调试你的代码 - 一个长度为 2 的数组有索引 0 和 1 - 你正在尝试访问索引 2,所以程序非常正确地抛出了一个有用、清晰和有意义的异常来帮助你解决问题.
-
我猜你在这行
sum = sum + W[clicks-1][i] * X[clicks-1][i]; -
是的,你是对的。 W 数组是问题所在。实际上我认为我为此放置了 20 行。但它只有2个。谢谢你。我认为它会解决问题。
标签: android exception nullpointerexception indexoutofboundsexception