2011-10-18

给申师兄写个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就可以启动了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值