【问题标题】:Shuffle not working in Java随机播放在 Java 中不起作用
【发布时间】:2015-12-09 22:44:52
【问题描述】:

我正在尝试为一个项目编写代码。该项目包括添加、删除、改组和重新排序(移动)字符串。 我目前被困在洗牌上。我正在使用import java.util.Collections,但我被卡住了。我的意思是通过使用下面的代码我得到一个异常:

private static void ShuffleTrack(int[] array) {
    Collections.swap(mp3Player, 0, 1);  
    System.out.println(""+mp3Player);
}

这是我得到的例外:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.rangeCheck(ArrayList.java:653)
    at java.util.ArrayList.get(ArrayList.java:429)
    at java.util.Collections.swap(Collections.java:497)
    at mp3Player.ShuffleTrack(mp3Player.java:78)
    at mp3Player.main(mp3Player.java:40)

我在实际程序中没有收到任何错误,只是控制台。

这里是代码

import java.util.Scanner;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

public class mp3Player {
public static Scanner in=new Scanner(System.in);

public static ArrayList<Track> mp3Player = new ArrayList<Track>();

public static void main(String[] args ){
    //declare variables
    int menu = 0;

do{ 
    System.out.println("***WELCOME***");
    System.out.println(" This is my MP3 Album ");
    System.out.println("Please Choose one of the following options:");
    System.out.println("1.Add a Track");
    System.out.println("2.Search for a Track");
    System.out.println("3.Delete an exisiting Track");
    System.out.println("4.Shuffle Tracks");
    System.out.println("5.Reorder Tracks");

    menu = in.nextInt(); //Record user choice

    switch(menu){
    case 1:
        InsertTrack();
        break;

    //case 2:
        //SearchTrack();
    //  break;

    //case 3: 
        //DeleteTrack();
        //break;

    case 4: 
        ShuffleTrack(null);
        //break;

    case 5:
        //ReorderTrack();
        //break;


    }//end of switch

} while(menu !=0); //End of loop

} // End of static void

private static void InsertTrack(){

    Track newtrack = new Track();

    System.out.println("Track Number: ");
    int Tracknumber = in.nextInt();

    System.out.println("Artist Name: ");
    String TrackArtist = in.next();

    System.out.println("Track Name: ");
    String TrackName = in.next();

    System.out.println("Track Duration: ");
    String TrackDuration = in.next();

    System.out.println("Your Track has been added.");

    newtrack.setTrack(Tracknumber, TrackArtist, TrackName, TrackDuration);

}//End of InsertTrack

private static void ShuffleTrack(int[] array){

    Collections.shuffle(Arrays.asList(mp3Player));

    }//End Of ShuffleTrack  


    //Set Attributes
    private String InsertTrack ="";
    private String SearchTrack ="";
    private String DeleteTrack = "";
    private String ShuffleTrack = "";
    private String ReorderTrack = "";

    // Setting Methods
    public void setMp3(String InsertTrack, String SearchTrack, String DeleteTrack, String ShuffleTrack, String ReorderTrack){


        this.InsertTrack = InsertTrack;
        this.SearchTrack = SearchTrack;
        this.DeleteTrack = DeleteTrack;
        this.ShuffleTrack = ShuffleTrack;
        this.ReorderTrack = ReorderTrack;

    }// End of Method

    public String getInsertTrack(){
        return InsertTrack;
    }
    public String getSearchTrack(){
        return SearchTrack;
    }
    public String getDeleteTrack(){
        return DeleteTrack;
    }
    public String getShuffleTrack(){
        return ShuffleTrack;
    }
    public String ReorderTrack(){
        return ReorderTrack;
    }

}//课程结束

【问题讨论】:

  • 我删除了你的“新问题”。如果您还有其他问题,请创建一个。您不应该在一篇文章中提出多个问题。
  • 堆栈跟踪显示mp3Player(显然是ArrayList)在您尝试交换索引01 处的(不存在的)元素时为空。我们无法告诉你为什么它是空的,但很明显你不能交换不存在的元素。
  • 好吧,我有点理解,由于某种原因,它基本上表明我没有添加任何东西;/我还有一个添加轨道选项,我添加了轨道,我添加了一些和仍然显示相同的错误;/。 抱歉添加第二个问题
  • @Vickz,此时,列表显然是空的。如果您需要帮助解决该错误,您需要发布更多内容。
  • 考虑提供一个runnable example 来证明您的问题。这不是代码转储,而是您正在做的事情的一个例子,它突出了您遇到的问题。这将导致更少的混乱和更好的响应

标签: java arrays collections shuffle


【解决方案1】:

为什么不直接使用Collections.shuffle()

看起来像这样:

Collections.shuffle(Arrays.asList(array));

【讨论】:

  • 把我踢回菜单。
  • 这会打乱一个您没有参考的列表...这没有意义...
【解决方案2】:

设法让它工作, 错过了一些代码,导致它无法保存在实际数组中,通过在 CreateTrack 末尾添加这个来修复它

mp3Player.add(newtrack);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-17
    • 2013-12-25
    • 2012-12-22
    • 1970-01-01
    • 2014-04-02
    • 2023-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多