给申师兄写个java小程序。
Java的ArrayList对自定义类的某关键字排序,首先是怎么排序的问题:
直接搜索“Java ArrayList 自定义类 排序”,找到做法:
插入Data类对象后取出来比较就行。
Data j;
for(int i =0;i<insort.size();i++)
{
j = insort.get(i);
}
一运行发现抛出
Exception in thread "main" java.lang.NullPointerException
at com.list.HashList.main(HashList.java:26)
异常
类数组如此定义:
class Data{
int data;
int value;
}
... ...
Data[] input = new Data[10];
觉得是没初始化的缘故:
搜索:”java 类数组 空指针“找原因
最后发现是类数组这样声明后还得初始化
for(int i=0;i<10;i++)
{
input[i]=new Data();
}
解决类数组在ArrayList里的排序问题后,就是按类对象关键字查找,简单的indexOf无法解决。最后还是没找到,只好自己写方法。
最终代码如下:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
class Data {
int data;
int value;
Data() {
data = 0;
value = 0;
}
}
class MyComparator implements Comparator{
public int compare(Object o1,Object o2) {
Data p1=(Data)o1;
Data p2=(Data)o2;
if(p1.value < p2.value)
return 1;
else
return 0;
}
}
public class HashList {
/*
* 排序
*/
static ArrayList<Data> MySort(ArrayList<Data> in) {
ArrayList<Data> insort = in;
Comparator comp = new MyComparator();
Collections.sort(insort, comp);
return insort;
}
/*
* 加法
*/
static ArrayList<Data> MyAdd(ArrayList<Data> in) {
ArrayList<Data> insort = in;
int i1 = 0, i2 = 0, i3 = 0, i4 = 0, max = 0;
/*
* 获取value值
*/
for (Data j : insort) {
if (j.data == 2) {
i1 = j.value;
}
if (j.data == 8) {
i2 = j.value;
}
if (j.data == 9) {
i3 = j.value;
}
if (j.data == 6) {
i4 = j.value;
}
}
/*
* 查找最大值
*/
max = i1;
if (max < i2) {
max = i2;
} else if (max < i3) {
max = i3;
} else if (max < i4) {
max = i4;
}
/*
* 重新赋值
*/
for (Data j : insort) {
if (j.data == 2) {
if (j.value == max) {
j.value = i1 + i2 + i3 + i4;
} else{
j.value = 0;
}
}
if (j.data == 8) {
if (j.value == max) {
j.value = i1 + i2 + i3 + i4;
} else{
j.value = 0;
}
}
if (j.data == 9) {
if (j.value == max) {
j.value = i1 + i2 + i3 + i4;
} else{
j.value = 0;
}
}
if (j.data == 6) {
if (j.value == max) {
j.value = i1 + i2 + i3 + i4;
} else{
j.value = 0;
}
}
}
return insort;
}
public static void main(String args[]) {
/*
* 创建数组
*/
Data[] input = new Data[10];
for (int i = 0; i < 10; i++) {
input[i] = new Data();
}
input[0].data = 1;
input[0].value = 200;
input[1].data = 2;
input[1].value = 123;
input[2].data = 3;
input[2].value = 20;
input[3].data = 4;
input[3].value = 23;
input[4].data = 5;
input[4].value = 100;
input[5].data = 6;
input[5].value = 12;
input[6].data = 7;
input[6].value = 2;
input[7].data = 8;
input[7].value = 13;
input[8].data = 9;
input[8].value = 256;
input[9].data = 10;
input[9].value = 321;
ArrayList<Data> handle = new ArrayList<Data>();
handle.add(input[0]);
handle.add(input[1]);
handle.add(input[2]);
handle.add(input[3]);
handle.add(input[4]);
handle.add(input[5]);
handle.add(input[6]);
handle.add(input[7]);
handle.add(input[8]);
handle.add(input[9]);
/*
* 程序开始
*/
ArrayList<Data> outsort1 = MySort(handle);
System.out.println("After sort");
for (Data j : outsort1) {
System.out.println(j.data + " : " + j.value);
}
System.out.println("After add");
ArrayList<Data> outsort2= MyAdd(outsort1);
for (Data j : outsort1) {
System.out.println(j.data + " : " + j.value);
}
}
}
PS:Eclipse遇上一个Bug:打开Eclipse就报"Failed to create the Java Virtual Machine”。如图所示:
直接觉得肯定是Eclipse坏了(我的脑子有问题,好端端的有段时间没动的Eclipse怎么会"突然自己就坏了“),从官网上又下载了Eclipse,还是同样问题,网上查了下,找到了个好链接:http://apps.hi.baidu.com/share/detail/30819988
里面讲到只需要改Eclipse目录下的eclipse.ini就可以了:
-startup
plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.100.v20110502
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m (改成128m)
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx512m
如其所说,改了后面的256就可以启动了。