Java数组连接
我正在尝试连接两个数组,以向数值数组的列添加标签,并在数组的最后一行之后添加总计。我在另一个堆栈溢出线程上发现了一些代码。但我犯了个错误 线程“AWT-EventQueue-0”java.lang.ClassCastException中的异常: [Ljava.lang.Object;不能强制转换为[[Ljava.lang.Object 这是我的密码Java数组连接,java,arrays,concatenation,Java,Arrays,Concatenation,我正在尝试连接两个数组,以向数值数组的列添加标签,并在数组的最后一行之后添加总计。我在另一个堆栈溢出线程上发现了一些代码。但我犯了个错误 线程“AWT-EventQueue-0”java.lang.ClassCastException中的异常: [Ljava.lang.Object;不能强制转换为[[Ljava.lang.Object 这是我的密码 public void getpdf(double[][] pricelist, ArrayList<Piece> in) {
public void getpdf(double[][] pricelist, ArrayList<Piece> in) {
PDDocument doc = new PDDocument();
PDPage page = new PDPage();
doc.addPage( page );
try {
PDPageContentStream contentStream =
new PDPageContentStream(doc, page);
JTable table=gettable(pricelist,in);
Object[] headercol={"Type","Asc","Ref","Commandes","Prix unitaire","Prix total"};
Object[][] content=getTableData(table);
Object[][] global=(Object[][]) concatenate (headercol,content);
//drawTable(page, contentStream, 700, 75, headercol);
drawTable(page, contentStream, 700, 75, content);
contentStream.close();
doc.save("bill.pdf" );
}
catch (IOException ex) {
ex.printStackTrace();
}
}
public <T> T[] concatenate (T[] a, T[][] b) {
int aLen = a.length;
int bLen = b.length;
@SuppressWarnings("unchecked")
T[] c = (T[]) Array.newInstance(a.getClass().getComponentType(), aLen+bLen);
System.arraycopy(a, 0, c, 0, aLen);
System.arraycopy(b, 0, c, aLen, bLen);
return c;
}
public void getpdf(双[][]价格表,中的ArrayList){
PDDocument doc=新的PDDocument();
PDPage page=新PDPage();
文件添加页(第页);
试一试{
PDPageContentStream内容流=
新的PDPageContentStream(文档,页面);
JTable table=gettable(pricelist,in);
Object[]headercol={“Type”、“Asc”、“Ref”、“Commandes”、“Prix unitaire”、“Prix total”};
对象[][]内容=getTableData(表);
对象[][]全局=(对象[][])连接(headercol,content);
//绘图台(第页,内容流,700,75,headercol);
绘图表(第页,内容流,700,75,内容);
contentStream.close();
doc.save(“bill.pdf”);
}
捕获(IOEX异常){
例如printStackTrace();
}
}
公共T[]串联(T[]a,T[]b){
int aLen=a.长度;
int bLen=b.长度;
@抑制警告(“未选中”)
T[]c=(T[])Array.newInstance(a.getClass().getComponentType(),aLen+bLen);
数组副本(a,0,c,0,aLen);
数组副本(b,0,c,aLen,bLen);
返回c;
}
公共T[]串联(T[]a,T[]b)
不能连接两个不同类型的数组。a
是T
s的数组,b
是T[]
s的数组,即它是T
s的数组。public T[]连接(T[]a,T[]b)
不能连接两个不同类型的数组。
a
是T
s的数组,b
是T[]
s的数组,也就是说,它是T
s的数组。似乎要连接T[/code>头和T[]b
content,但是您的concatenate
方法返回一个T[]
。您必须返回一个T[]
,也就是说,创建一个a.getClass()
数组,而不是a.getClass().getComponentType()
。另外,在新的T[]]c
中,T[]a
将只占据一个位置,因此总长度仅为b.length+1
。请尝试以下操作:
public <T> T[][] concatenate (T[] a, T[][] b) {
T[][] c = (T[][]) Array.newInstance(a.getClass(), b.length + 1);
c[0] = a;
System.arraycopy(b, 0, c, 1, b.length);
return c;
}
输出:
[Type, Asc, Ref, Commandes, Prix unitaire, Prix total]
[A, B, C, D, E, F, G, H]
[1, 2, 3, 4, 5, 6, 7, 8]
[a, b, c, d, e, f, g, h]
似乎您想要连接
T[]a
头和T[]b
内容,但是concatenate
方法返回一个T[]
。您必须返回一个T[]a
,即创建一个a.getClass()
数组,而不是a.getClass().getComponentType()
。另外,在新的T[][]c
中,T[]a
将只占据一个位置,因此总长度仅为b.length+1
。尝试以下操作:
public <T> T[][] concatenate (T[] a, T[][] b) {
T[][] c = (T[][]) Array.newInstance(a.getClass(), b.length + 1);
c[0] = a;
System.arraycopy(b, 0, c, 1, b.length);
return c;
}
输出:
[Type, Asc, Ref, Commandes, Prix unitaire, Prix total]
[A, B, C, D, E, F, G, H]
[1, 2, 3, 4, 5, 6, 7, 8]
[a, b, c, d, e, f, g, h]
你在哪一行上得到错误?你在尝试输入一个
T[]c
aT[]b
,这是两种不兼容的类型。你在哪一行上得到错误?你在尝试输入一个T[]c
aT[]b
,这是两个不兼容的类型hank。确实如此。但是,我尝试连接的两个数组具有相同的列数。声明对象[][]headercol引发类型不匹配:无法将字符串转换为对象[]谢谢。确实如此。但是,我尝试连接的两个数组的列数相同。声明对象[][]headercol引发类型不匹配:无法将字符串转换为对象[]但是,当尝试将最后一行添加到表中,即包含总价的行时,我得到一个ArrayStoreException。在我看来,我在concatenate2函数中执行的操作与在concatenate函数中执行的操作完全相同。下面是我正在执行的代码using@m_h不同之处在于,此函数将头添加为arra中的第一个元素y、 然而,页脚必须是最后一行。我在上面的建议中添加了concatenate2,因为它与您的concatenate函数非常相似。但是这会引发ArrayStoreException,正如我前面所说的那样。@m_h请参阅我的更新以获得更一般的解决方案。顺便说一句,您得到的异常是因为如果a
是您必须使用的2D数组使用a.getClass().getComponentType()
(或b.getClass()
)但是,当尝试将最后一行添加到表中,即包含总价的行时,我得到一个ArrayStoreException。在我看来,我在concatenate2函数中执行的操作与在concatenate函数中执行的操作完全相同。下面是我正在执行的代码using@m_h不同之处在于,此函数将头添加为arra中的第一个元素y、 然而,页脚必须是最后一行。我在上面的建议中添加了concatenate2,因为它与您的concatenate函数非常相似。但是这会引发ArrayStoreException,正如我前面所说的那样。@m_h请参阅我的更新以获得更一般的解决方案。顺便说一句,您得到的异常是因为如果a
是您必须使用的2D数组使用a.getClass().getComponentType()
(或b.getClass()
)
[Type, Asc, Ref, Commandes, Prix unitaire, Prix total]
[A, B, C, D, E, F, G, H]
[1, 2, 3, 4, 5, 6, 7, 8]
[a, b, c, d, e, f, g, h]