gpt4 book ai didi

Java-交换数组列表索引

转载 作者:行者123 更新时间:2023-12-01 15:07:35 24 4
gpt4 key购买 nike

我通过 arraylist 制作了一个映射,并尝试交换 arraylist 的索引(而不是值)。

例如,swapRow(1,2) 更改第 1 行和第 2 行的位置。这是第一次工作,但如果我再次这样做,就会出现错误。(swapCol() 部分也有同样的问题。)

陷入这个问题并需要帮助......

此外,任何人都可以帮我制作 swapValue() 方法。更改值很简单,但我也想移动索引,而不是值。

import java.text.DecimalFormat;
import java.util.ArrayList;
public class IntMap {

class Data {
private int data_;

public Data(int data)
{

setData(data);
}

public void setData(int data)
{
if(data<0)data=0;
if(data>99)data=99;

data_=data;

}

public int getData()
{
return data_;
}

}


class Index {

private int index_;

public Index(int index)
{
setIndex(index);
}

public void setIndex(int index)
{
if(index < 0) index=0;

index_=index;
}

public int getIndex()
{
return index_;
}

}



private ArrayList<ArrayList<Data>> datas_;
private ArrayList<Index> cols_;
private ArrayList<Index> rows_;

public IntMap(int rowCount, int colCount)
{
if(rowCount < 0) rowCount = 1;
if(rowCount < 0) colCount = 1;

cols_ = new ArrayList<Index>();
rows_ = new ArrayList<Index>();
datas_ = new ArrayList<ArrayList<Data>>();

for(int i=0 ; i<rowCount ; ++i) rows_.add(new Index(i));
for(int i=0 ; i<colCount ; ++i) cols_.add(new Index(i));

for(int i=0 ; i< rowCount ; ++i)
{
ArrayList<Data> temp = new ArrayList<Data>();
datas_.add(temp);

for(int j=0 ; j<colCount ; ++j)
{
temp.add(new Data(0));
}

}

}

public int getValue(int row, int col)
{
int rIndex = getRowIndex(row);
int cIndex = getColIndex(col);

return datas_.get(rIndex).get(cIndex).getData();
}

public void setValue(int row, int col, int value)
{
int rIndex = getRowIndex(row);
int cIndex = getColIndex(col);

datas_.get(rIndex).get(cIndex).setData(value);

}




public void setRandomValue()
{
for(int row=0 ; row < datas_.size() ; ++row)
{
ArrayList<Data> temp = datas_.get(row);

for(int col=0; col <temp.size() ; ++col)
{
Data data = temp.get(col);

data.setData((int)(Math.random()*100));

}
}
}

public void log()
{
DecimalFormat df = new DecimalFormat("00");
for(int row=0; row<rows_.size(); ++row)
{
for(int col=0; col<cols_.size(); ++col)
{

int value = getValue(row, col);
System.out.print(df.format(value));

if(col<cols_.size()-1)
System.out.print(", ");
}

System.out.println();
}
System.out.println();
}

private int getColIndex(int col)
{
if(col <0 || col>=cols_.size())
{
System.out.println("[error][IntMap][getColIndex] - col is"+col);
return 0;
}

for(int i =0; i<cols_.size(); ++i)
{
if(cols_.get(i).getIndex()==col)
return i;
}

System.out.println("[error][IntMap][getColIndex] - unknown error");
return 0;

}

private int getRowIndex(int row)
{
if(row <0 || row>=rows_.size())
{
System.out.println("[error][IntMap][getRowIndex] - row is"+row);
return 0;
}

for(int i =0; i<rows_.size(); ++i)
{
if(rows_.get(i).getIndex()==row)
return i;
}

System.out.println("[error][IntMap][getRowIndex] - unknown error");
return 0;

}

public void swapValue(int a, int b, int c, int d)
{

//

}

public void swapCol(int a, int b)
{
int col1=a;
int col2=b;
int t=a;

cols_.get(col1).setIndex(col2);
cols_.get(col2).setIndex(t);

}

public void swapRow(int a, int b)
{
int t=a;

rows_.get(a).setIndex(b);
rows_.get(b).setIndex(t);

}

public static void main(String[] args)
{
System.out.println("start!");

IntMap map =new IntMap(3,4);

System.out.println("Init map 3x4");
map.log();

System.out.println("random map");
map.setRandomValue();
map.log();

System.out.print("get map[0][1]= ");
System.out.println(map.getValue(0,1));

System.out.println("set map[2][1]=50");
map.setValue(2, 1 ,50);
map.log();

System.out.println("swap(0,1 <-> 2,1)");
map.swapValue(0,1,2,1);
map.log();

System.out.println("swapRow(0 <-> 2)");
map.swapRow(0,2);
map.log();

System.out.println("swapRow(1 <-> 2)");
map.swapRow(1,2);
map.log();

System.out.println("swapCol(0 <-> 3)");
map.swapCol(0,3);
map.log();


}
}

最佳答案

我认为您对 rows_ arrayList 的索引和您的 Index 类型感到困惑。您的 swapRow(a,b) 应该检查 rows_ list 并找出元素(索引对象) .getIndex = a 和 b,然后交换两个 Index 元素,而不是像您在方法中所做的那样。如果将方法更改为以下内容,它应该可以工作。你可以做一些错误处理,例如发生了什么参数 a 或 b 无效。我只是将它们设置为 0。

public void swapRow(int a, int b) {
int ai = 0, bi = 0;
for (final Index i : rows_) {
if (i.getIndex() == a) {
ai = rows_.indexOf(i);
}
if (i.getIndex() == b) {
bi = rows_.indexOf(i);
}
}
final Index aidx = rows_.get(ai);
rows_.set(ai, rows_.get(bi));
rows_.set(bi, aidx);

}

而且,我不知道你的具体要求。但从设计的角度来看,可能还有改进的空间。

关于Java-交换数组列表索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12768246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com