java - 在此应用程序中添加代码后,该应用程序无法运行
问题描述
添加此代码后,该应用程序无法正常工作。问题是什么?如果删除此代码,该应用程序将正常运行。
int i, num=0, num2=0;
for(i=0; i<=23; i++) {
if(result[i] == 1) {
num++;
}
}
int[] Time = new int[num-1];
for(i=0; i<=23; i++) {
if(result[i] == 1) {
Time[num2]=i;
num2++;
}
}
Toast.makeText(getApplicationContext(), Arrays.toString(Time), Toast.LENGTH_LONG).show();
完整的代码是这个
package org.techtown.challenge09;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.Arrays;
public class MainActivity extends AppCompatActivity {
ListView listView;
SingerAdapter adapter;
EditText Name;
EditText Start;
EditText End;
Button button;
int[] result = new int[24];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Name = findViewById(R.id.editText1);
Start = findViewById(R.id.editText2);
End = findViewById(R.id.editText3);
adapter = new SingerAdapter();
button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String name = Name.getText().toString();
String start = Start.getText().toString() + ":00";
String end = End.getText().toString() + ":00";
adapter.addItem(new SingerItem(name, start, end, R.drawable.human));
int First = Integer.parseInt(Start.getText().toString());
int Last = Integer.parseInt(End.getText().toString());
for(int i=First; i<Last; i++) {
result[i] = 1;
}
}
});
listView = findViewById(R.id.listView);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
SingerItem item = (SingerItem) adapter.getItem(position);
Toast.makeText(getApplicationContext(), "선택 : " + item.getName(),
Toast.LENGTH_LONG).show();
}
});
int i, num=0, num2=0;
for(i=0; i<=23; i++) {
if(result[i] == 1) {
num++;
}
}
int[] Time = new int[num-1];
for(i=0; i<=23; i++) {
if(result[i] == 1) {
Time[num2]=i;
num2++;
}
}
Toast.makeText(getApplicationContext(), Arrays.toString(Time), Toast.LENGTH_LONG).show();
}
public class SingerAdapter extends BaseAdapter {
ArrayList<SingerItem> items = new ArrayList<SingerItem>();
@Override
public int getCount() {
return items.size();
}
public void addItem(SingerItem item) {
items.add(item);
}
@Override
public Object getItem(int position) {
return items.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
SingerItemView view = new SingerItemView(getApplicationContext());
SingerItem item = items.get(position);
view.setName(item.getName());
view.setStart(item.getStart());
view.setEnd(item.getEnd());
view.setImage(item.getResId());
return view;
}
}
}
解决方案
由于您尚未发布错误日志,因此我只是在猜测。在这段代码中:
int i, num=0, num2=0;
for(i=0; i<=23; i++) {
if(result[i] == 1) {
num++;
}
}
int[] Time = new int[num-1];
如果内部不存在result[]
等于的元素,1
则将num
保留其初始值0
。
所以在那之后你初始化Time
为int[-1]
.
这会抛出一个异常,如java.lang.NegativeArraySizeException
推荐阅读
- r - ggplot 条形图只有最频繁的重复数据
- vue.js - Vue数据函数结构有什么不同
- mobx-react - Javascript中的`Map.clear()`与`new Map()`有什么区别?
- javascript - 如何在幻灯片切换中首先隐藏 div 并在单击时显示?
- typescript - 使两个函数在 Typescript 中使用相同的数字(由 findRandom 生成)
- swift - 如何正确格式化 CoreData 中枚举类型的模型属性?
- java - 在 IntelliJ 中导入 JsonFormat 时遇到问题
- javascript - 如何从这个序列化结果到这个 JSON
- json - 使用 Angular 在 JSON 调用中显示嵌套对象时遇到问题
- c# - 使用 Linq 编辑元素的多个后代