1

私がすべきことは、ユーザーがソフトウェアの名前と在庫数を入力できるようにするプログラムを作成することです。それらを配列に格納し、選択ソートを使用して最小から最大の順にソートする必要があります。

私の問題は、ソフトウェアの名前を番号から分離したくないということです! また、コンパイル時にソートされた名前が表示されません! 選択の並べ替えについて TONS を読みましたが、基本的にはすべてこのように見えます。何が問題なのですか?選択ソートが間違っていましたか?

これは私のコード全体ではありませんが、重要なものを除外しているとは思いません:

// Global variables
static String[] SoftwareArray;
static int[] QuantityArray;

public static void inputInfo() throws IOException
{
    BufferedReader userInput = new BufferedReader  (new InputStreamReader(System.in));  
    System.out.print("How many softwares would you like to input? ");
    String software = userInput.readLine();
    int softwareNum = Integer.parseInt(software);  
    int[] softArray = new int[softwareNum];      

    String [] name = new String [softwareNum];
    int [] quantity = new int[softwareNum];      

    // Initialize global variables
    SoftwareArray = new String[softwareNum];
    QuantityArray = new int[softwareNum];

    //loop through number of softwares  
    for (int i = 0; i < softwareNum; i++)
    {
        System.out.println("Input name of software: ");
        String softwareName = userInput.readLine();

        name[i] = softwareName;

        System.out.println("Input quantity of software: ");
        String quantityString = userInput.readLine();
        int softwareQuantity = Integer.parseInt(quantityString);  

        quantity[i] = softwareQuantity;

        // Copy the software name and quantity to the global variables
        QuantityArray[i] = quantity[i];
        SoftwareArray[i] = name[i];

        System.out.println("There are " + quantity[i] + " of the " + name[i] + " software.");
    }
}

//method to sort and display info
public static void displayInfo(int[] arr, String[] name)
{      
    //sort by quantity
    for(int i=0; i<arr.length; i++)
    {
        for(int j=i+1; j<arr.length; j++)
        {
            if(arr[i] > arr[j] )
            {
                int temp = arr[j];
                arr[j] = arr[i];
                arr[i] = temp;

                String tempString = name[j];
                name[j] = name[i];
                name[i] = tempString;
            }
        }
        //output
        for(i=0; i < arr.length; i++)
        {
            System.out.println(arr[i] + "  " + name[i]);
        }
    }
}

//main
public static void main(String[] args) throws IOException {
   //input
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    inputInfo();

    displayInfo(QuantityArray, SoftwareArray);
}

出力:

How many softwares would you like to input? 2
Input name of software: 
Microsoft
Input quantity of software: 
1000
There are 1000 of the Microsoft software.
Input name of software: 
Linux
Input quantity of software: 
2983
There are 2983 of the Linux software.

その後、何もありません。ソートされたリストはまったく表示されません。

4

3 に答える 3

-1

O(n ^ 2)の複雑さを保証するため、選択ソートが必要な理由が具体的にわかりません。さらに、外側のループは長さ - 1 まで実行する必要があると感じています。ここをチェックして、正しく設定してください。

さらに、現在、コードは次の出力を提供します。

How many softwares would you like to input? 3

Input name of software: windows
Input quantity of software: 3
There are 3 of the windows software.

Input name of software: google
Input quantity of software: 2
There are 2 of the google software.

Input name of software: office
Input quantity of software: 4
There are 4 of the office software.

2  google
3  windows
4  office

何か違うことを期待していますか? はいの場合は、質問に追加してください。また、これは選択ソートではありません。これは私にはバブルソートのように思えます。

編集私のマシンで実行されるコードを貼り付けて、上記の出力を生成します。java.io.BufferedReader をインポートします。import java.io.IOException; java.io.InputStreamReader をインポートします。

public class Test {

    // Global variables
    static String[] SoftwareArray;
    static int[] QuantityArray;

    public static void inputInfo() throws IOException {
    BufferedReader userInput = new BufferedReader(new InputStreamReader(
            System.in));
    System.out.print("How many softwares would you like to input? ");
    String software = userInput.readLine();
    int softwareNum = Integer.parseInt(software);
    int[] softArray = new int[softwareNum];

    String[] name = new String[softwareNum];
    int[] quantity = new int[softwareNum];

    // Initialize global variables
    SoftwareArray = new String[softwareNum];
    QuantityArray = new int[softwareNum];

    // loop through number of softwares
    for (int i = 0; i < softwareNum; i++) {
        System.out.println("Input name of software: ");
        String softwareName = userInput.readLine();

        name[i] = softwareName;

        System.out.println("Input quantity of software: ");
        String quantityString = userInput.readLine();
        int softwareQuantity = Integer.parseInt(quantityString);

        quantity[i] = softwareQuantity;

        // Copy the software name and quantity to the global variables
        QuantityArray[i] = quantity[i];
        SoftwareArray[i] = name[i];

        System.out.println("There are " + quantity[i] + " of the "
                + name[i] + " software.");
    }
}

// method to sort and display info
public static void displayInfo(int[] arr, String[] name) {
    // sort by quantity
    for (int i = 0; i < arr.length; i++) {
        for (int j = i + 1; j < arr.length; j++) {
            if (arr[i] > arr[j]) {
                int temp = arr[j];
                arr[j] = arr[i];
                arr[i] = temp;

                String tempString = name[j];
                name[j] = name[i];
                name[i] = tempString;
            }
        }
        // output
        for (i = 0; i < arr.length; i++) {
            System.out.println(arr[i] + "  " + name[i]);
        }
    }
}

// main
public static void main(String[] args) throws IOException {
    // input
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    inputInfo();
    displayInfo(QuantityArray, SoftwareArray);
}
}
于 2013-08-27T18:03:48.523 に答える