2017-04-16 74 views
0

我想为一些作业制作电影数据库。卡住添加删除功能。由于我的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

更好的使用列表。 –

+0

你错过了一些非常重要的东西。你应该使用一个数组,'List','Map'或者其他一些数据结构来保存你的'Movie'对象...而不是叫做'm1','m2','m3','m4'等变量。然后要删除一个电影,你**从数据结构中删除**。基本上,您需要丢弃大部分已经“写入”的复制粘贴代码。 –

+0

如果列表过于先进,请转到数组。其他人是正确的,使用m1,m2,...变量,这是错误的。如果你想允许5部电影怎么办?还是50? – GhostCat

回答

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等

+0

我们不能使用数组,因为我们还没有了解它们,但我相信我们可以使用列表。有初学者的好教程吗?我有一个快速搜索,没有发现太多。此外,我们必须将我们的电影存储在MovieDatabase类中,该列表将位于那里还是在Interface类中? –

+0

你的列表会放在你的MovieDatabase类中。 https://docs.oracle.com/javase/8/docs/api/java/util/List.html是列表中的官方java文档 –

+0

好吧,我非常感谢帮助,但对我来说这是一个全新的概念,很抱歉如果我的问题听起来很愚蠢,但我真的不知道该怎么做。这将如何与Interface类交互,我是否还需要m1.setName等?列表中是否存储了电影的所有信息,或者是名称? –

0

您的具体实现的答案:您无法使用该moviecount变量来确定您想在哪个插槽中添加新的移动!

取而代之:只是走过你的电影对象。并将数据推入空白的第一个数据。

含义:您可以在Movie类上定义一个“isEmpty()”方法,如果名称为null,则返回true。

但只是为了记录:拥有和使用这些setter方法是一个坏方法。通常情况下,您会希望使用电影类的构造函数设置所有这些值,因为您不希望稍后更改该信息。

然后您可以简单地做

movie1 = new... 

创建一个新的电影和

movie1 = null 

删除它后来当。然后,您还可以轻松检查是否插入了一个插槽:

if (movie1 == null) {... 
+0

对不起,我不太明白。在我的Movie类中定义一个“isEmpty()”方法?另外电影1 =新? movie1从哪里来的?新的是什么?你的意思是m1 =新电影()? –

+0

是的。好吧:更像新电影(名称,...) - 提供您目前通过这些设置方法设置的值。 – GhostCat