我正在尝试为一些家庭作业制作电影数据库。卡住添加删除功能。由于我的moivecount变量,我试图重新添加另一部电影时遇到困难。如果我删除movie3,如果我有4部电影,那么moviecount == 3当我尝试添加另一部电影时,当我需要添加movie3时,它再次要求movie4。
import java.util.*;
public class Interface {
private void run()
{
Scanner console = new Scanner(System.in);
Movie m1;
Movie m2;
Movie m3;
Movie m4;
String name, director;
int size, duration, option;
int moviecount = 0;
m1 = new Movie();
m2 = new Movie();
m3 = new Movie();
m4 = new Movie();
do {
System.out.println("Import new movie:(0), Delete movie from Database (2), View Movies: (3), Exit (9): ");
option = console.nextInt();
switch(option)
{
case 0:
if(moviecount == 0)
{
System.out.print("First Movie: ");
name = console.next();
m1.setName (name);
System.out.print("Director: ");
director = console.next();
m1.setDirector (director);
System.out.print("Size in MB: ");
size = console.nextInt();
m1.setSize(size);
System.out.print("Duration in minutes: ");
duration = console.nextInt();
m1.setDuration(duration);
moviecount++;
break;
}
else if(moviecount == 1)
{
System.out.print("Second Movie: ");
name = console.next();
m2.setName (name);
System.out.print("Director: ");
director = console.next();
m2.setDirector (director);
System.out.print("Size in MB: ");
size = console.nextInt();
m2.setSize(size);
System.out.print("Duration in minutes: ");
duration = console.nextInt();
m2.setDuration(duration);
moviecount++;
break;
}
else if(moviecount == 2)
{
System.out.print("Third Movie: ");
name = console.next();
m3.setName (name);
System.out.print("Director: ");
director = console.next();
m3.setDirector (director);
System.out.print("Size in MB: ");
size = console.nextInt();
m3.setSize(size);
System.out.print("Duration in minutes: ");
duration = console.nextInt();
m3.setDuration(duration);
moviecount++;
break;
}
else if(moviecount == 3)
{
System.out.print("Fourth Movie: ");
name = console.next();
m4.setName (name);
System.out.print("Director: ");
director = console.next();
m4.setDirector (director);
System.out.print("Size in MB: ");
size = console.nextInt();
m4.setSize(size);
System.out.print("Duration in minutes: ");
duration = console.nextInt();
m4.setDuration(duration);
moviecount++;
break;
}
else
{
System.out.print("Too many movies currently stored \n" );
break;
}
case 2: System.out.print("Which movie to delete? (1), (2), (3), (4) \n");
option = console.nextInt();
switch(option)
{
case 1: m1.setName(null);
m1.setDirector(null);
m1.setSize(0);
m1.setDuration(0);
System.out.print("Movie 1 deleted! ");
moviecount--;
break;
case 2: m2.setName(null);
m2.setDirector(null);
m2.setSize(0);
m2.setDuration(0);
moviecount--;
break;
case 3: m3.setName(null);
m3.setDirector(null);
m3.setSize(0);
m3.setDuration(0);
moviecount--;
break;
case 4: m4.setName(null);
m4.setDirector(null);
m4.setSize(0);
m4.setDuration(0);
moviecount--;
break;
}
case 3: System.out.print("Movies stored in database: \n");
System.out.print(m1.getName()+"\n");
System.out.print(m2.getName()+"\n");
System.out.print(m3.getName()+"\n");
System.out.print(m4.getName()+"\n");
}
}
while(option!=9);
}
public static void main(String[] args){
Interface intFace = new Interface();
intFace.run();
}
}
答案 0 :(得分:1)
问题在于你的设计。您遇到此问题是因为您实际上并未将电影存储在任何地方。您只是创建了4个不同的电影对象并将其打印出来。如果您更改了打印报表的顺序,则它们的顺序会不同。
您需要添加某种数据结构 - 任何数组,列表或其他类型的集合来存储您的电影。
例如,您可以创建List
来存储电影数据。
//create new List called movieList
List movieList = new ArrayList();
//add movies to the list
movieList.add(m1);
movieList.add(m2);
movieList.add(m3);
movieList.add(m4);
//remove movies from the list by position
movieList.remove(0);
movieList.remove(1);
movieList.remove(2);
movieList.remove(3);
您可以使用列表add()
方法将电影添加到列表中,然后使用remove()
方法将其删除。请记住,remove
会删除您提供的索引处的元素,索引从0开始。
因此,例如要删除第一部电影,您将调用movieList.remove(0)。 第二部电影将在索引1等等。
答案 1 :(得分:0)
您具体实施的答案:您无法使用该moviecount变量来确定要在哪个插槽中添加新动作!
相反:只需走过你的电影对象。并将数据推入第一个空的数据。
含义:你可以定义一个" isEmpty()" Movie类上的方法,如果名称为null,则返回true。
但仅仅是为了记录:拥有和使用这些setter方法是一种糟糕的方法。通常,您可能希望使用影视类的构造函数设置所有这些值,因为您不希望以后允许更改该信息。
然后你只需要做
movie1 = new...
创建新电影时
movie1 = null
稍后删除它。然后您还可以轻松检查是否采用了插槽:
if (movie1 == null) {...