Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java数组连接_Java_Arrays_Concatenation - Fatal编程技术网

Java数组连接

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) {

我正在尝试连接两个数组,以向数值数组的列添加标签,并在数组的最后一行之后添加总计。我在另一个堆栈溢出线程上发现了一些代码。但我犯了个错误

线程“AWT-EventQueue-0”java.lang.ClassCastException中的异常: [Ljava.lang.Object;不能强制转换为[[Ljava.lang.Object

这是我的密码

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
a
T[]b
,这是两种不兼容的类型。你在哪一行上得到错误?你在尝试输入一个
T[]c
a
T[]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]