2015-11-08 5 views
0

Я пытаюсь напечатать имя песни и длину песен каждый раз, когда цикл завершается. Как мне это сделать? Report+= songTitles[numSongs] + songLengths[numSongs]?Печать списка значений из массива

Затем мне нужно выполнить линейный поиск, чтобы удалить песни из плейлиста. Нужно ли использовать ту же строку отчета, чтобы пользователь мог видеть все песни? Мне просто нужна помощь. Спасибо.

import javax.swing.JOptionPane; 

public class asdf_Playlist { 

    public static void main(String[] args) { 

    final int MAX_SONGS = 106; 
    int totalDuration = 0; 
    int numSongs = 0; 
    boolean exitVar = false; 
    int i = 0; 

    String[] songTitles = new String[MAX_SONGS]; 
    int[] songLengths = new int[MAX_SONGS]; 

    while (exitVar == false && numSongs <= songTitles.length) { 

     do { 

     songTitles[numSongs] = JOptionPane.showInputDialog(null,"Enter a song name, or type -1 to exit"); 
     if (songTitles[numSongs].equals("")) { 
      JOptionPane.showMessageDialog(null,"Error: Please enter a valid song name, or type -1 to exit"); 
     } else if (songTitles[numSongs].equals("-1")) { 
      exitVar = true; 
     } 
     } while (songTitles[numSongs].equals("")); 


     do { 
     try { 
      songLengths[numSongs] = Integer.parseInt(JOptionPane.showInputDialog(null,"Enter a song length, e.g. 4.")); 
      if (songLengths[numSongs] > 0) { 
      totalDuration += songLengths[numSongs]; 
      } else { 
      songLengths[numSongs] = -1; 
      JOptionPane.showMessageDialog(null,"Error: please enter a valid song length, e.g. 4."); 
      } 
     } catch (NumberFormatException e) { 
      songLengths[numSongs] = -1; 
      JOptionPane.showMessageDialog(null, "Error: please enter a valid song length, e.g. 4."); 
     } 

     } while (songLengths[numSongs] <= 0); 



     boolean addMore = true; 

     while ((numSongs <= MAX_SONGS) && (addMore == true)) { 
     JOptionPane.showMessageDialog(null, "Song #" + (i+1) + ": " + songTitles[i] + " length: " + songLengths[i] + "\n"); 
     i++; 
     if (songTitles[i] == null) { 
      addMore = false; 
     } 
     } 
     numSongs++; 
    } 
    } 
} 
+2

Неясно, что вы просите. Вы имеете в виду печать на консоль или файл? Вы хотите распечатать все песни для каждой итерации цикла? О чем говорит «Отчет» в вашем вопросе? – sprinter

+0

Извините, я просто хотел напечатать названия и длины песен каждый раз, когда цикл перезапускается, чтобы пользователь мог видеть каждую песню, которую они ввели. Это все, что я хочу сделать. – Hello

+0

Мне также нужно было использовать линейный поиск, чтобы удалить песни, и я думаю, что я мог бы использовать строку с заголовком отчета (что-то вроде «Название песни:, длина песни:»), чтобы показать все песни, поэтому пользователь может ввести имя песни, чтобы удалить ее из списка. Я просто понял, что могу использовать строку, которая объединяет и берет предыдущую введенную информацию, поэтому пользователь может видеть каждую введенную песню, а не только предыдущую. – Hello

ответ

0

У меня есть несколько предложений, которые помогут вам сделать это проще.

Во-первых, вы должны создать класс, чтобы записывать информацию о песне, а не иметь два отдельных массива. Это сделает жизнь намного легче для вас в долгосрочной перспективе (и лучше практика OO). Затем вы можете создать метод toString, как часть этого класса форматировать информацию о песне:

class Song { 
    private final String title; 
    private final int length; 

    public String toString() { 
     return title + ":" + length; 
    } 
} 

Ваши песни массивы становятся проще:

private Song[] songs = new Song[MAX_SONGS]; 

Печать весь список может быть сделано в ряде направлений , До Java 8 было бы вообще выглядеть примерно так:

for (Song song: songs) 
    System.out.println(song); 

Поскольку Java 8 был выпущен это может быть упрощена:

Arrays.stream(songs).forEach(System.out::println); 

Удаление элементов из массива не так просто, как удаление их из коллекции , Но это все-таки не так уж трудно:

Song[] copy = new Song[MAX_SONGS]; 
int copiedSongs = 0; 
for (Song song: songs) 
    if (/* condition for copying */) 
     copy[copiedSongs++] = song; 
songs = copy; 
numSongs = copiedSongs; 

Опять же, с помощью Java 8 это стало намного проще:

songs = Arrays.stream(songs).filter(/*condition*/).toArray(); 
numSongs = songs.length; 
Смежные вопросы