为什么我重写了equals方法,输入数据还是可以输入相同的数据

为什么我重写了equals方法,输入数据还是可以输入相同的数据

public boolean equals(Object obj) {

if(this==obj)

{

return true;

}

//判断obj是否是Song类的对象

if(obj.getClass()==Song.class)

{

Song song = (Song)obj;

return song.getId().equals(id)&&song.getName()==name&&song.getSinger()==singer;

}

return false;

}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
好帮手慕珊 2017-04-25 21:21:48

addToPlaylist方法中需要进行判断插入的歌曲在List中是否存在,LIst本身是可以添加重复数据的,重写hashCode和equals方法的目的是为了当两个对象进行比较时,确定两个对象是否相等

查询指定播放列表中的歌曲,要先输入播放列表名称,判断该播放列表PlayLIstCollection中是否存在,如果存在得到播放列表对象,然后调用显示歌曲的方法

  • 提问者 qq_星空独奏_0 #1
    判断歌曲是否在list中存在,是查主播放列表还是查找全部播放列表?
    2017-04-26 19:49:00
  • 提问者 qq_星空独奏_0 #2
    而且我的添加歌曲的方法,添加到主方法的同时还会添加到其他列表中】
    2017-04-26 20:13:02
  • 好帮手慕珊 回复 提问者 qq_星空独奏_0 #3
    输入播放列表名称,根据播放列表名称进行查看。在此处,主播放列表跟普通播放列表同等对待
    2017-04-27 09:08:48
提问者 qq_星空独奏_0 2017-04-25 19:31:23
package com.demo19;
//播放器类
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class PlayList {
	private String playListName;
	private List<Song> musicList;
	
	
	public PlayList() {
		musicList = new ArrayList();
	}


	public PlayList(String playListName, List<Song> musicList) {
		this.playListName = playListName;
		this.musicList = musicList;
	}


	public String getPlayListName() {
		return playListName;
	}


	public void setPlayListName(String playListName) {
		this.playListName = playListName;
	}


	public List<Song> getMusicList() {
		return musicList;
	}


	public void setMusicList(List<Song> musicList) {
		this.musicList = musicList;
	}
	
	
	//将歌曲添加到播放列表中
	public void addToPlayList(Song song)
	{
		
		getMusicList().add(song);
	}
	
	//显示播放列表中所有歌曲
	public void displayAllSong()
	{
		for(int i=0;i<getMusicList().size();i++)
		{
			System.out.println(((Song) getMusicList().get(i)).getId()+"     "+
								((Song)getMusicList().get(i)).getName()+"     "+((Song)getMusicList().get(i)).getSinger());
		}
	}
	
	//通过ID查询歌曲的方法
	public Song searchSongById(String id)
	{
		Song song = null;
		for(Song temp:musicList)
		{
			if(temp.getId().equals(id))
			{
				song = temp;
				
				break;
			}
			
		}
		return song;
	}
	
	//通过歌曲名称去查找歌曲
	public Song searchSongByName(String name)
	{
		
		Song song = null;
		for(Song temp:musicList)
		{
			if(temp.getName().equals(name))
			{
				song = temp;
				
				break;
			}
			
		}
		return song;
		
	}
	
	//修改歌曲
	public void updateSong(Song song)
	{
		
	}
	
	//从播放列表删除歌曲
	public void deleteSong(String id)
	{
		Song song;
		for(Song temp:musicList)
		{
			if(temp.getId().equals(id))
			{
				song = temp;
				musicList.remove(song);
				System.out.println("删除成功");
				break;
			}
		}
	}
	
	//导出歌单
	public void exportPlayList()
	{
		
	}
}


package com.demo19;

import java.util.Scanner;

//测试类
public class TestDemo {
	PlayListCollection pc = new PlayListCollection();
	PlayList pl = new PlayList();

	// 测试Song类
	public void testSong() {

	}

	// 测试播放列表类
	public void testPlayList() {

	}

	// 测试播放器类
	public void testPlayListCollection() {

	}

	// 主菜单
	public void mainMenu() {

	}

	// 播放列表管理菜单
	public void playListMenu() {
		
		while (true) {
			Song song = new Song();
			Scanner sc = new Scanner(System.in);
			System.out.println("*****************************");
			System.out.println("**播放列表管理**");
			System.out.println("1--将歌曲添加到主播放列表");
			System.out.println("2--将歌曲添加到普通播放列表");
			System.out.println("3--通过歌曲ID查询播放列表中的歌曲");
			System.out.println("4--通过歌曲名称查询播放列表中的歌曲");
			System.out.println("5--修改播放列表中的歌曲");
			System.out.println("6--删除播放列表中的歌曲");
			System.out.println("7--显示播放列表中的所有歌曲");
			System.out.println("8--导出歌单");
			System.out.println("9--返回上一级菜单");
			System.out.println("*****************************");
			int key;
			switch (key = sc.nextInt()) {
			case 1:

				
				// 输入ID
				System.out.println("请输入歌曲ID");
				String id = sc.next();
				song.setId(id);
				// 输入歌曲名
				System.out.println("请输入歌曲名");
				String name = sc.next();
				song.setName(name);
				// 输入歌手名
				System.out.println("请输入歌手");
				String singer = sc.next();
				song.setSinger(singer);
				pc.playListMap.get("主播放列表").addToPlayList(song);

				break;

			case 2:
				// 输入播放列表名称
				System.out.println("输入要插入播放列表名称");
				String playlistname = sc.next();
				if ((pc.getPlayListMap()).containsKey(playlistname)) {

				} else {
					System.out.println("该播放列表不存在,请先将播放列表添加到播放器中!");
					break;
				}
				// 输入ID
				System.out.println("请输入歌曲ID");
				String id2 = sc.next();
				song.setId(id2);
				// 输入歌曲名
				System.out.println("请输入歌曲名");
				String name2 = sc.next();
				song.setName(name2);
				// 输入歌手名
				System.out.println("请输入歌手");
				String singer2 = sc.next();
				song.setSinger(singer2);
				pc.searchPlayListByName(playlistname);

				break;

			case 3:
				System.out.println("请输入查找歌曲的ID");
				String sid = sc.next();
				song = pl.searchSongById(sid);
				if(song!=null)
				{
					System.out.println("该ID存在");
					System.out.println("ID为"+song.getId()+"的信息如下");
					System.out.println(song);
				}
				else{
					System.out.println("该ID的歌曲不存在");
				}
				break;

			case 4:
				System.out.println("请输入查找歌曲的名称");
				String sname = sc.next();
				song = pl.searchSongByName(sname);
				if(song!=null)
				{
					System.out.println("该歌曲存在");
					System.out.println("歌曲名为"+song.getName()+"的信息如下");
					System.out.println(song);
				}
				else{
					System.out.println("该歌曲不存在");
				}
				break;

			case 5:
				break;

			case 6:
				break;

			case 7:
				// 输入播放列表名称
				System.out.println("输入播放列表名称");
				String playlistname2 = sc.next();
				if ((pc.getPlayListMap()).containsKey(playlistname2)) {
					
					pc.getPlayListMap().get(playlistname2).displayAllSong();

				} else {
					System.out.println("该播放列表不存在,请先将播放列表添加到播放器中!");
					break;
				}
				

				break;

			case 8:
				break;

			case 9:
				break;
			}
		}
	}

	// 播放器菜单
	public void palyerMenu() {

		pc.getPlayListMap().put("主播放列表", pl);

		while (true) {
			System.out.println("*****************************");
			System.out.println("**播放器管理**");
			System.out.println("1--向播放器添加播放列表");
			System.out.println("2--从播放器删除播放列表");
			System.out.println("3--通过名字查询播放列表信息");
			System.out.println("4--显示所有播放列表");
			System.out.println("*****************************");
			Scanner sc = new Scanner(System.in);
			int key;
			switch (key = sc.nextInt()) {
			case 1:
				System.out.println("请输入列表的名称");
				String name = sc.next();
				pl.setPlayListName(name);
				pc.addPlayList(pl);
				break;

			case 2:
				System.out.println("请输入要删除列表的名称");
				String name1 = sc.next();
				pc.deletePlayList(name1);
				break;

			case 3:
				System.out.println("请输入列表的名称");
				String name2 = sc.next();
				pc.searchPlayListByName(name2);
				break;

			case 4:
				pc.displayPlayListName();
				break;

			case 0:

				break;

			}

		}

	}

	// 主流程实现
	public void test() {
		pc.getPlayListMap().put("主播放列表", pl);
	}

	public static void main(String[] args) {

		TestDemo t = new TestDemo();
		t.test();
		t.playListMenu();

	}

}


好帮手慕珊 2017-04-25 18:43:52

我今天给另一个同学答疑时,发现他是在添加Song类的对象时,把Song作为参数传进来,然后在方法中从键盘接收的数据,又去调用set方法,改了Song对象的属性值,但对象一直没变,所以一旦改变属性值,之前添加到List中的对象值也变了,就成了相同数据了。

这个是那个问答的链接,你看看添加歌曲的方法,你是不是跟他一个情况,不行的话你就贴完整代码。祝学习愉快!

http://class.imooc.com/course/qadetail/5284

  • 提问者 qq_星空独奏_0 #1
    我的不会覆盖之前的信息,只是可以输入相同的歌曲
    2017-04-25 19:28:04
  • 提问者 qq_星空独奏_0 #2
    还有怎么查询指定的播放列表中的歌曲
    2017-04-25 20:04:47
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师