2017-04-16 68 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