gpt4 book ai didi

Java:使用泛型类创建整数数组的数组

转载 作者:行者123 更新时间:2023-11-30 02:46:17 25 4
gpt4 key购买 nike

以下表示通用 Queue 类的代码。现在,我主要尝试做的事情是,我尝试使用 Queue 类创建一个整数数组的数组。然而,由于我没有设法将整数数组数组中的元素正确添加到队列中,我的尝试惨遭失败。这是带有一些解释的代码:

主要:

import java.util.Iterator;

public class Main
{public static void main(String[] args)
{Queue <Integer[][]> Q= new Queue<Integer[][]>(); // creating the queue
Integer []i1={1,2,3};
Integer []i2={1,2,3};
Integer [][]i=new Integer[][]{i1,i2}; // creating the array of integer arrays
Q.add(i);

for(Iterator<Integer[][]> it=Q.iterator(); it.hasNext();){ System.out.print(it.next()+" "); }
System.out.println();

Iterator<Integer[][]> it=Q.iterator();
it.next();
it.remove();
System.out.println(Q);

}
}

这是 Queue 类:

import java.util.*;

public class Queue <T>
{LinkedList<T>queue=new LinkedList<T>();
public void add(T x){ queue.add(x); NOF++; } // the regular add function

public void add(T[][] x) // the add function in case we get an array of Integer arrays
{ int i=0,j=0,k=0; T [] v;
while(x[i][j]!=null) // checking if the are still availabe arrays
{ v=x[i][j]; //1 passing to v an array (or at least what I thought I'd pass)
//but i don't think it works
while(v[k]!=null) // while the arrays has elements, add them to the queue
{ queue.add(v);
j++;
NOF++;
k++; }
j++; } }


public void remove(T x){ queue.remove(); }
public T peek(T x){ return queue.peek(); }
public String toString(){ String S=""; for(T x: queue)S=S + x + " "; return S; }
static int NOF=0;

public class QueueIterator<T> implements Iterator<T>
{ int index=0;
public boolean hasNext(){ return index < queue.size(); }
public T next(){ return (T) queue.get(index++); }
public void remove(){ if(index>0)queue.remove(index-1); } }

public Iterator<T> iterator(){ return new QueueIterator<T>(); }

}

所以它显然不起作用,但我不明白为什么,在//1 我收到错误:

Type mismatch, cannot convert from T to T[]

但我不明白为什么,x[i][j] 也应该是 T[]。

friend 们,有什么想法吗?

最佳答案

你的问题非常简单(有点令人惊讶,因为编码风格过于复杂!)

您似乎想创建一个隐式使用 T 的两维数组的队列:

class Queue<T> ...
public void add(T[][] x)

但是然后你正在实例化那个东西......再次使用二维数组:

Queue <Integer[][]> Q = ...

从这个意义上说,你在这里“加倍”了事情。

您只需将队列使用更改为

Queue <Integer> Q = ...

让事情顺利进行!

但这将是错误的解决方案。您会发现:您根本不需要这些数组信息。

只需让您的队列实现处理 T 对象即可。到处使用 T[][] 不会给你带来任何值(value)! Queue 类代码中的任何内容都不依赖于您期望 T 的两维数组这一事实!

含义:您会将这些信息放入您的客户端(因此,您会一直说 Integer[][] 。但是:这也是错误的:混合数组和集合没有没有点.如果您确实需要二维,只需使用List<Integer>List<List<Integer>>

编辑:

A)第一个建议...要解决您的问题,请转到您的 Q 类并简单地删除其中的任何 [][] 。然后您可以保持 Main 类不变,并且应该可以编译。

B)但是,您也应该考虑更改您的 Main 类 - 使其使用列表而不是数组!

关于Java:使用泛型类创建整数数组的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40115933/

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