2013-11-19 6 views
1

У меня есть рубиновый backround и im new для java. Я написал базовую программу, но почему-то я получаю ошибку, я не могу исправить! Мой код:Требуется массив, но ArrayList <String> найдено

import java.util.ArrayList; 

public class Music { 

    private ArrayList<String> files; 


    public static void main(String args[]){ 

     Music a = new Music(); 
     a.addFile("Chasen Paper"); 
     a.addFile("Mama"); 
     a.addFile("Hell Yes"); 
     a.removeFile("Hell Yes"); 
    } 
    public Music(){ 
     files = new ArrayList<String>(); 
    } 

    public void addFile(String filename){ 
     files.add(filename); 
    } 

    public void returnFiles(){ 
     for(int i = 0; files.size() <= i; i++){ 
      System.out.println(i + ". Ist: " + files[i]); 
     } 

    } 

    public void removeFile(String filename){ 
     System.out.println("Vorher gab es " + files.size() + " Dateien"); 
     files.remove(filename); 
     System.out.println("Jetzt gibt es " + files.size() + " Dateien"); 
    } 
} 

Когда я пытаюсь скомпилировать я получаю эту ошибку как-то: Что я не так? Благодаря!

Music.java:26: error: array required, but ArrayList<String> found 
      System.out.println(i + ". Ist: " + files[i]); 
+0

Как вы получаете элемент в индексе 'i' из' ArrayList'? –

ответ

9

Вы должны использовать метод get(), чтобы получить элемент в определенном индексе из ArrayList. Вы не можете использовать [], чтобы получить элемент по определенному индексу, в arraylist. Его возможно только для массивов, а ваш files не является массивом, а ArrayList.

System.out.println(i + ". Ist: " + files.get(i)); 

Кроме того, состояние в вашей петле for немного не работает. files.size() <= ifalse, и поэтому он не входит в петлю for.

Измените это на нечто подобное.

for(int i = 0; i < files.size() ; i++){ 
0

Файлы [i] используются для массивов. При работе со списками вам нужно использовать индексирование. Попробуйте files.get (i)

1

Вы не можете получить доступ к архаристу, как массив, который вы должны использовать методом get (index), чтобы получить i-й элемент.

public void returnFiles(){ 
     for(int i = 0;i< files.size() ; i++){ 
      System.out.println(i + ". Ist: " + files.get(i)); 
     } 

    } 
+0

Зачем ты снова катаешь это снова? – BoltClock

+0

@BoltClock это было потому, что было много изменений, и я смутился извините за это. – Lakshmi

0

Эй проблема в этом методе

public void returnFiles(){ 
     for(int i = 0; files.size() <= i; i++){ 
      System.out.println(i + ". Ist: " + files[i]); 
     } 

} 

Именно на

files[i] 

Вы пытаетесь получить доступ к ArrayList переменной экземпляра, как если бы это был массив. Просто измените, что для

files.get(i) 

Вы должны использовать метод get(int index) из ArrayList <> класса.

1

Изменить этот

for(int i = 0; files.size() <= i; i++){ 
    System.out.println(i + ". Ist: " + files[i]); 
} 

Как

for(String i:files){ 
    System.out.println(i); 
} 

Если вам нужно индексных

int index = 0; 
for(String i:files){ 
     System.out.println((index++) + ".Ist: " +i); 
    } 
+0

Если вам нужен индекс, вы не должны использовать цикл for-each и вместо этого использовать правильную версию исходного цикла, как в принятый ответ. – Dukeling

0

файлов является ArrayList и не Array вместо того, чтобы делать files[i] вы должны сделать this-

 for(int i = 0; files.size() <= i; i++){ 
      System.out.println(i + ". Ist: " + files.get(i)); 
     } 
0

Вы должны использовать files.get (i), поскольку используете ArrayList, а не Array. Когда вы используете массив в это время, вам понадобится его местоположение индекса для извлечения значений из него. ArrayList предоставляет метод get (i) для извлечения значений из init.

Смежные вопросы