站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题关于二维数组问题

关于二维数组问题

摘要: 关于二维数组问题


现在有一个二维数组
s[a][b]
00 1 2 0 3
00 1 1 1 3
01 0 0 0 1
01 1 1 1 1
02 0 0 1 2
我现在需要做的是得到这样一个数组
00 2 3 1 6
01 1 1 1 2
02 0 0 1 2
既凡是s[a][0]值相同的,把它同一行的其他值累加起来
这个语句该怎么写


public static void main(String[] argvs) throws IOException {

int[][] array = { { 0, 1, 2, 0, 3 }, { 0, 1, 1, 1, 3 },
{ 1, 0, 0, 0, 1 }, { 1, 1, 1, 1, 1 }, { 2, 0, 0, 1, 2 } };
int resultCount = 0;// 保存在结果数组中有效行数的值;
int[][] result = new int[5][5];
for (int j = 0; j < array[0].length; j++) {
result[0][j] = array[0][j];// 把第一行记录存放到结果中;
}
for (int i = 1; i < array.length; i++) {
int index = exist(result, resultCount, array[i][0]);// 判断第i行第一个值是否在结果数组中存在;
if (index == -1) {// 如果不存在则,在结果数组中新增一行记录;
resultCount++;
for (int k = 0; k < result[resultCount].length; k++) {
result[resultCount][k] = array[i][k];
}
} else {// 如果存在则把当前array中当前行,与结果数组的相应行的值相加;
for (int m = 1; m < result[index].length; m++) {
result[index][m] += array[i][m];
}
}
}
for (int l = 0; l <= resultCount; l++) {// 打印结果;
for (int n = 0; n < result[0].length; n++) {
System.out.print(result[l][n]);
}
System.out.println();
}
}

static int exist(int result[][], int rows, int value) {// 判断在结果数组中是否存在第一列的值与value相等;
for (int i = 0; i <= rows; i++) {
if (value == result[i][0]) {
return i;
}
}
return -1;
}


格式乱了,重新发一次:
public static void main(String[] argvs) {

int[][] array = { { 0, 1, 2, 0, 3 }, { 0, 1, 1, 1, 3 },{ 1, 0, 0, 0, 1 }, { 1, 1, 1, 1, 1 }, { 2, 0, 0, 1, 2 } };
int resultCount = 0;// 保存在结果数组中有效行数的值;
int[][] result = new int[5][5];
for (int j = 0; j < array[0].length; j++) {
result[0][j] = array[0][j];// 把第一行记录存放到结果中;
}
for (int i = 1; i < array.length; i++) {
int index = exist(result, resultCount, array[i][0]);// 判断第i行第一个值是否在结果数
//组中存在;
if (index == -1) {// 如果不存在则,在结果数组中新增一行记录;
resultCount++;
for (int k = 0; k < result[resultCount].length; k++) {
result[resultCount][k] = array[i][k];
}
} else {// 如果存在则把当前array中当前行,与结果数组的相应行的值相加;
for (int m = 1; m < result[index].length; m++) {
result[index][m] += array[i][m];
}
}
}
for (int l = 0; l <= resultCount; l++) {// 打印结果;
for (int n = 0; n < result[0].length; n++) {
System.out.print(result[l][n]);
}
System.out.println();
}
}

static int exist(int result[][], int rows, int value) {// 判断在结果数组中是否存在第一列的值与value相等;
for (int i = 0; i <= rows; i++) {
if (value == result[i][0]) {
return i;
}
}
return -1;
}


楼上的没有返回一个3×5的数组,是输出乐5×5数组的前3行,不过也差不多乐
package j2se;

public class S {

/**
* @param args
*/


public static int[][] combine(int[][] s)
{
int len = s.length;

int[] row = new int[s.length];

for(int i=0;i{
row[i] = i;
}
for(int i=0;i{
for(int j=i+1;j{
if(row[j]!=j) continue;
if(s[j][0]==s[i][0])
{
row[j] = i ;
len--;
}
}
}
int[][] scopy = new int[len][s[0].length];
int scopylen = 0;
for(int i=0;i{
if(row[i]!=i) continue;
for(int k=0;k{
scopy[scopylen][k] = s[i][k];
}
for(int j=i+1;j{
if(row[j]!=i) continue;
for(int k=0;k{
scopy[scopylen][k] += s[j][k];
}
}
scopylen++;
}

return scopy;

}

public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] array = { { 0, 1, 2, 0, 3 }, { 0, 1, 1, 1, 3 },
{ 1, 0, 0, 0, 1 }, { 1, 1, 1, 1, 1 }, { 2, 0, 0, 1, 2 } };
int[][] copy = combine(array);
for(int i=0;i {
for(int j=0;j System.out.print(copy[i][j]);
System.out.println();
}
}

}



代码好复杂,其实用个 HashSet 就能搞定,代码稍后。


int[][] x = new int[5][];
x[0] = new int[] {0, 1, 2, 0, 3};
x[1] = new int[] {0, 1, 1, 1, 3};
x[2] = new int[] {1, 0, 0, 0, 1};
x[3] = new int[] {1, 1, 1, 1, 1};
x[4] = new int[] {2, 0, 0, 1, 2};

HashMap map = new HashMap();
for (int i = 0; i < x.length; i++) {
int[] m = x[i];
int[] n = map.get(m[0]);
if (n != null) {
for (int j = 1; j < n.length; j++) {
n[j] += m[j];
}
} else {
n = m;
}
map.put(n[0], n);
}

Iterator iterator = map.values().iterator();
DecimalFormat format = new DecimalFormat("00");
while (iterator.hasNext()) {
int[] k = iterator.next();
System.out.print(format.format(k[0]));
for (int i = 1; i < k.length; i++) {
System.out.print('/t');
System.out.print(k[i]);
}
System.out.println();
}


如果原来的数组是排了序的,可以用这段代码,更简单一些:

int[][] x = new int[5][];
x[0] = new int[] { 0, 1, 2, 0, 3 };
x[1] = new int[] { 0, 1, 1, 1, 3 };
x[2] = new int[] { 1, 0, 0, 0, 1 };
x[3] = new int[] { 1, 1, 1, 1, 1 };
x[4] = new int[] { 2, 0, 0, 1, 2 };

ArrayList data = new ArrayList();
int[] last = x[0];
data.add(last);
for (int i = 1; i < x.length; i++) {
if (last[0] == x[i][0]) {
for (int j = 1; j < last.length; j++) {
last[j] += x[i][j];
}
} else {
last = x[i];
data.add(last);
}
}

Iterator iterator = data.iterator();
DecimalFormat format = new DecimalFormat("00");

while (iterator.hasNext()) {
int[] k = iterator.next();
System.out.print(format.format(k[0]));
for (int i = 1; i < k.length; i++) {
System.out.print('/t');
System.out.print(k[i]);
}
System.out.println();
}


最后如果需要的是数组,可以
int[][] y = new int[data.size()][];
data.toArray(y);



public static void main(String[] ar) {
TwoLevel t = new TwoLevel();
int[][] a = {{0,1,2,0,3},{0,1,1,1,3},{1,0,0,0,1},{1,1,1,1,1},{2,0,0,1,2}};
int index = a[0][0];
int length = a.length;
for (int i = 0; i < length; i++) {
if (i + 1 < length){
if (a[i+1][0] == index) {
for (int j = 1; j < a[0].length; j++) {
a[i+1][j] += a[i][j];
}
} else {
index = a[i+1][0];
t.printf(a,i,a[0].length);
}
} else {
t.printf(a,i,a[0].length);
}
}
}
public void printf(int[][] a, int index, int col) {
for (int i = 0; i < col; i++) {
System.out.print(a[index][i]);
}
System.out.println();
}


谢谢各位老大 可以实现了 小弟分不多,请笑纳


↑返回目录
前一篇: 【50分问大牛】学了几个月struts发现没弄明白基础知识
后一篇: 高手们,我有难啊!