2013-09-21 63 views
0

我在這裏有我的代碼,在這裏我正在做一些簡單的數組的東西。本來這是我工作的成果:帶開關語句的基本數組

  • 輸出:
  • 輸入項目:_ //我不知道爲什麼我應該有這個。
  • 主菜單
    1. 添加項目//顯示列表
    2. 移除項//顯示列表;並搜索要刪除的特定項目。
    3. 排序項//上市
      • 升階
      • 降序
    4. 刪除列表//應該返回到選項1是添加項目
    5. 退出
import java.util.Scanner; 
import java.util.Arrays; 
import java.util.*; 

public class MainArray{ 

    public static void main(String[] args){    
     Scanner user_input = new Scanner(System.in); 
     int choice; 
     int array[] = new int[10]; //Default Size. 

     choice = menu(user_input);    
     while(choice != 4){     
      switch (choice){      
       case 1: array = addItems(array, user_input);  break; 
       case 2: array = removeItems(array, user_input); break; 
       case 3: array = sort(array);      break;      
       default: break; 
      } 

      choice = menu(user_input); 
     }    
     System.out.println("The End");    
    } 

    public static int menu(Scanner user_input) {    
     System.out.println("\n-------"); 
     System.out.println("Here are your choices: \n" + "1: Add Items " + "2: Remove Items " + "3: Sort Items " + "4: End"); 
     System.out.println("-------"); 
     int choice = user_input.nextInt(); 
     return choice; 
    } 

    public static int[] addItems(int array[], Scanner user_input){  
     for(int i = 0; i < array.length; i ++){     
      System.out.print("Value #" + (i + 1) + ": ");     
      array[i] = user_input.nextInt(); 
     }    
     return array; 
    } 

    public static int[] removeItems(int array[], Scanner user_input){    
     System.out.println("Number to be removed: ");    
     for(int i = 0; i < array.length; i ++){ 
      System.out.println("Item removed: " + array[i]);     
      try {      
       array[i] = user_input.nextInt(); 
      }    
      catch(Exception e){      
       array[array.length - 1] = 0; 
      } 
     }    
     return array; 
    } 

    public static int[] sort(int array[]){ 
     System.out.println("Numbers in Ascending Order:");    
     for(int i = 0; i < array.length; i ++){     
      Arrays.sort(array); 
      System.out.print(" " + array[i]); 
     }    
     System.out.println("\nNumbers in Descending Order:");    
     for(int i = array.length - 1; i >= 0; i --){  
      System.out.print(" " + array[i]); 
     }    
     return array; 
    } 
} 

所以,現在我需要的是如何正確地刪除和刪除我的物品。我非常清楚,我的代碼是錯誤的,有些是正確的,大部分都混在一起。基本上這個:

  1. 如何刪除我的列表中的某些項目(例如值#1:50,值#2:90,...,值#10:1),我想刪除什麼是在前。值#7.
  2. 如何正確顯示列表中的當前/列表中的東西。
  3. 刪除我的列表,讓您回到選項1,即「添加項目」。
+0

您可以改用ArrayList。這具有在特定位置添加和刪除單個元素的方法。另外你爲什麼要多次調用Arrays.sort?你只需要調用一次。 – SpiderPig

+0

傳達是方法名稱只以小寫字母開頭。 – Elazar

+1

@Elazar,除了無害的空白變化之外,不要更改他們的代碼。更改方法名稱的情況可能會導致更多的混淆,而不是值得的。 – jedwards

回答

1

由於您在創建後試圖處理整數集合,因此您需要使用其他類型的集合,如ArrayList。您可以初始化這種類型的集合是這樣的:

List<Integer> aList = new ArrayList<Integer>(); 

注意收集需要Integer對象,但在大多數情況下,自動裝箱和自動拆箱將幫助您在傳球和從集合中檢索項目。像以前一樣,您可以將從用戶讀取的整數()添加到aList中,並且Java負責將它作爲整數對象包裝。

一旦你創建了這個集合,你可以很容易地添加()和刪除()的東西。 remove()方法只需要刪除對象,因此您甚至不需要知道集合中該對象的索引。實際上,您也可以調用ArrayList的clear()方法,它將完成您提到的以「刪除」已添加的所有項目並重新開始的方式提到的內容。

現在,關於你的循環......你似乎很難在removeItems()中迭代列表的長度,並要求每次刪除一個項目。如果用戶只想刪除單個項目會怎麼樣?最好將替換爲循環,然後將其留給用戶,以便根據需要從菜單中選擇該選項,以決定要刪除多少項。最後,如果切換到ArrayList方法,則在您的sort()方法中,您需要在ArrayList上使用Collections.sort()方法,而不是使用Collections.sort()方法。再一次,無需將Collections.sort()調用放在循環中。這只是一個效率低下的事情,因爲你只需要分類一次。

這是我正在談論的方法的一個例子。你會想嘗試添加一些輸入驗證等,但它作爲如何使用ArrayList的你正在嘗試做的事情的說明:

public class Test{ 

    public static void main(String[] args){    
     Scanner user_input = new Scanner(System.in); 
     int choice; 

     List<Integer> aList = new ArrayList<>(); 

     choice = menu(user_input);    
     while(choice != 4){     
      switch (choice){      
       case 1: aList = Test.addItems(aList, user_input);  break; 
       case 2: aList = Test.removeItems(aList, user_input); break; 
       case 3: Test.sort(aList);     break;      
       default: break; 
      } 

      choice = menu(user_input); 
     }    
     System.out.println("The End");    
    } 

    public static int menu(Scanner user_input) {    
     System.out.println("\n-------"); 
     System.out.println("Here are your choices: \n" + "1: Add Items " 
      + "2: Remove Items " + "3: Sort Items " + "4: End"); 
     System.out.println("-------"); 
     int choice = user_input.nextInt(); 
     return choice; 
    } 

    public static List<Integer> addItems(List<Integer> nums, Scanner user_input){  
     nums.clear(); 
     for(int i = 0; i < 10; i ++){     
      System.out.print("Value #" + (i + 1) + ": "); 
      nums.add(user_input.nextInt()); 
     } 
     return nums; 
    } 

    public static List<Integer> removeItems(List<Integer> nums, Scanner user_input){    
     System.out.println("Number to be removed: "); 

     Integer remove = user_input.nextInt(); 
     if (nums.contains(remove)) { 
      nums.remove(remove); 
      System.out.println("Item removed: " + remove); 
     } 
     else { 
      System.out.println("Number not found."); 
     } 
     return nums; 
    } 

    public static void sort(List<Integer> nums){ 
     System.out.println("Numbers in Ascending Order:");    
     Collections.sort(nums); 
     for(int i = 0; i < nums.size(); i++) { 
      System.out.print(" " + nums.get(i)); 
     } 

     System.out.println("\nNumbers in Descending Order:");    
     for(int j = nums.size() - 1; j >= 0; j --){  
      System.out.print(" " + nums.get(j)); 
     }    
    } 
} 

對於List接口的一些詳細信息本身:

http://docs.oracle.com/javase/tutorial/collections/interfaces/list.html

+0

那麼我很清楚,我的情況2是一個問題,所以現在我試圖解決這個問題,我可以從知道Java比我更好的人那裏得到的所有幫助。D – NoviceProgrammer

+0

這太愚蠢了,我。我剛剛意識到我正在使用JCreator,因爲它是我們在學校使用的唯一程序。難怪有些代碼不起作用。他們是爲了Eclipse。 D: – NoviceProgrammer

+0

嗯,永遠不會解決問題。謝謝您的幫助。 – NoviceProgrammer