0

ここに私のコードがあり、単純な配列の処理を行っています。もともとこれは私の仕事の出力です:

  • 出力:
  • アイテムを入力してください: _ // なぜこれを持っている必要があるのか​​ わかりません。
  • メインメニュー
    1. アイテムを追加 //表示リスト
    2. 項目を削除 //表示リスト; そして、削除する特定のアイテムを検索します。
    3. アイテムの並べ替え //Listed
      • 昇順
      • 降順
    4. Delete List //オプション 1 の Add item に戻る必要があります
    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 に add() すると、Java がそれを Integer オブジェクトとしてラップします。

このコレクションを作成すると、add() と remove() を簡単に実行できます。remove() メソッドは、削除するオブジェクトを単純に受け取るため、コレクション内のそのオブジェクトのインデックスを知る必要さえありません。実際、ArrayList で呼び出すことができる clear() メソッドもあります。これは、追加されたすべてのアイテムを「削除」して最初からやり直すという点で言及したことを実現します。

さて、あなたのループに関して... removeItems() でリストの長さを繰り返し、毎回削除するアイテムを要求するのは厄介なようです。ユーザーが 1 つのアイテムのみを削除したい場合はどうすればよいでしょうか? その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 に答える