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. 如何删除我列表中的某些项目(例如 Value#1: 50, Value#2: 90, ... , Value#10: 1),我想删除 ex 中的任何内容。价值#7。
  2. 如何正确显示列表中当前/之前和之后的列表。
  3. 删除我的列表并让您返回选项 1,即“添加项目”。
4

1 回答 1

1

因为您试图在创建整数集合后对其进行操作,所以您需要使用另一种类型的集合,例如 ArrayList。您可以通过以下方式初始化此类集合:

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

请注意,集合需要 Integer 对象,但在大多数情况下,自动装箱和自动拆箱将帮助您从集合中传递和检索项目。您可以像以前一样将您从用户读取的整数添加()到aList,并且Java会为您将其包装为整数对象。

一旦你创建了这个集合,你就可以轻松地 add() 和 remove() 东西。remove() 方法只需要您要删除的对象,因此您甚至不需要知道该对象在集合中的索引。实际上,您还可以在 ArrayList 上调用 clear() 方法,该方法将完成您提到的“删除”所有已添加的项目并重新开始的操作。

现在,关于你的循环......你在 removeItems() 中迭代列表的长度并要求每次删除一个项目似乎很尴尬。如果用户只想删除单个项目怎么办?最好完全删除该for循环,并让用户根据需要从菜单中选择该选项来决定要删除多少项目。

最后,如果您切换到 ArrayList 方法,在您的 sort() 方法中,您将需要在 ArrayList 上使用 Collections.sort() 方法。再一次,无需将 Collections.sort() 调用放在for循环中。这只是一件低效的事情,因为你只需要对你的排序一次。

这是我正在谈论的方法的一个示例。您将要尝试添加一些输入验证等,但它可以说明如何将 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

于 2013-09-21T19:31:43.613 回答