2013-03-02 71 views
0

我有一個返回數組的問題。返回/打印陣列

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]; 
     } 
    } 
+0

我測試了這段代碼,它工作正常。你能分享到底你是怎麼稱呼'abel'的方法嗎? – vikingsteve 2013-03-02 19:49:52

+0

它工作正常,但輸出是[Ljava.lang.String; @(and_some_numbers) – Jadea 2013-03-02 19:56:46

回答

0

你所得到的錯誤"Incompatible types"因爲你abel()方法的返回類型是String[]和你試圖返回Stringtab[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(); 
    } 

} 
+0

好吧,我改變了它,但現在它讓我「ArrayIndexOutOfBoundsException」:/ – Jadea 2013-03-02 20:06:52

+0

你可以發佈完整的stackTrace嗎? – 2013-03-02 20:09:27

+0

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

1

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]); 
            } 
+1

發送'new String [0]'參數時不需要重新發送(請小心做一個測試?)。 – 2013-03-02 19:46:29

+0

哎呀,它是複製/粘貼錯誤.. :) – PermGenError 2013-03-02 19:47:08

+0

他在哪裏發送'新的String [0]'作爲參數? – vikingsteve 2013-03-02 19:47:58