返回/打印阵列
我有一个返回数组的问题。返回/打印阵列
package iterators;
import java.util.*;
import java.io.*;
public class Nic {
String[] abel() throws IOException {
int i = 0;
BufferedReader wczytaj = new BufferedReader(new FileReader("filmy.txt"));
StringBuilder sb = new StringBuilder();
String tekst = wczytaj.readLine();
while (tekst != null) {
sb.append(tekst);
sb.append("\n");
tekst = wczytaj.readLine();
}
String calosc = sb.toString();
String film = calosc;
String znak = ",";
String[] tab;
tab = film.split(znak);
for (i = 0; i < tab.length; i++) {
System.out.println("listusia: " + i + " " + tab[i]);
}
List<String> list = Arrays.asList(tab);
Collections.reverse(list);
tab = (String[]) list.toArray();
for (i = 0; i < tab.length; i++) {
System.out.println(tab[i]);
}
return tab;
}
}
我想返回一个数组,在这里印刷:
for(i=0;i<tab.length;i++){
System.out.println(tab[i]);
}
,但我有问题。无法返回tab [i],因为它给我一个错误“不兼容的类型”。我需要这个数组来执行其他操作。任何人都可以帮我吗?
这是更改后我的代码:
package iterators;
import java.util.*;
import java.io.*;
public class Nic{
String abel() throws IOException{
int i=0;
BufferedReader wczytaj = new BufferedReader(new FileReader("filmy.txt"));
StringBuilder sb=new StringBuilder();
String tekst=wczytaj.readLine();
while (tekst!=null) {
sb.append(tekst);
sb.append("\n");
tekst=wczytaj.readLine();
}
String calosc=sb.toString();
String film=calosc;
String znak=",";
String[]tab=new String[301];
tab=film.split(znak);
for(i=0;i<tab.length;i++){
//System.out.println("listusia: "+i+" "+tab[i]);
}
List<String> list=Arrays.asList(tab);
Collections.reverse(list);
tab = (String[]) list.toArray();
for(i=0;i<tab.length;i++){
//System.out.println(tab[i]);
}
return tab[i];
}
}
你所得到的错误"Incompatible types"
因为你abel()
方法的返回类型是String[]
和你试图返回String
(tab[i]
)。如果您想返回tab[i]
,则必须将abel()
方法的返回类型更改为String
而不是String[]
。
如果要返回整个数组,请使用String[]
返回类型。它会起作用。
import java.util.*;
import java.io.*;
public class Nick {
String[] abel() throws IOException {
int i = 0;
BufferedReader wczytaj = new BufferedReader(new FileReader("filmy.txt"));
StringBuilder sb = new StringBuilder();
String tekst = wczytaj.readLine();
while (tekst != null) {
sb.append(tekst);
sb.append("\n");
tekst = wczytaj.readLine();
}
String calosc = sb.toString();
String film = calosc;
String znak = ",";
String[] tab;
tab = film.split(znak);
for (i = 0; i < tab.length; i++) {
System.out.println("listusia: " + i + " " + tab[i]);
}
List<String> list = Arrays.asList(tab);
Collections.reverse(list);
tab = (String[]) list.toArray();
for (i = 0; i < tab.length; i++) {
System.out.println(tab[i]);
}
return tab;
}
public static void main(String[] args) throws IOException {
Nick nick = new Nick();
nick.abel();
}
}
好吧,我改变了它,但现在它让我“ArrayIndexOutOfBoundsException”:/ – Jadea 2013-03-02 20:06:52
你可以发布完整的stackTrace吗? – 2013-03-02 20:09:27
java.lang.ArrayIndexOutOfBoundsException:301 \t在iterators.Nic.abel(Nic.java:33) \t在迭代器.__ SHELL37.run(__ SHELL37.java:11) \t在sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法) \t在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) \t在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) \t在java.lang.reflect.Method.invoke( Method.java:601) \t at bluej.runtime.ExecServer $ 3.run(ExecServer.java:725) – Jadea 2013-03-02 20:21:51
List#toArray()返回Object[]
阵列。改为使用超载List#toArray(T[])。
tab = list.toArray(new String[list.size()]);
for(i=0;i<tab.length;i++){
System.out.println(tab[i]);
}
发送'new String [0]'参数时不需要重新发送(请小心做一个测试?)。 – 2013-03-02 19:46:29
哎呀,它是复制/粘贴错误.. :) – PermGenError 2013-03-02 19:47:08
他在哪里发送'新的String [0]'作为参数? – vikingsteve 2013-03-02 19:47:58
我测试了这段代码,它工作正常。你能分享到底你是怎么称呼'abel'的方法吗? – vikingsteve 2013-03-02 19:49:52
它工作正常,但输出是[Ljava.lang.String; @(and_some_numbers) – Jadea 2013-03-02 19:56:46