Пузырьковая сортировка.Мне нужен double или int? - PullRequest
0 голосов
/ 30 марта 2011

ОК. Итак, я делаю программу сортировки пузырьков, чтобы убедиться, что массивы в порядке, и у меня теперь первый класс скомпилирован нормально, но второй продолжает доставлять мне проблемы. Сейчас он говорит, что это неправильный тип, поэтому я изменил переменную dif на int вместо double, но затем он говорит о возможной потере точности. Вот код для первого файла.

public class BubbleSort
{
    public static void sort(int[] a, int numberUsed)
    {
        int index;
        for ( int i =0; i<numberUsed; i++)
        {
            for (index = 0; index<a.length - 1; index++)
            {
                if (a[index]> a[index + 1])
                {
                    interchange(index, index + 1, a);
                } //end of if ()
            } //end of for ()
        } //end of for ()
    }
        private static void interchange(int i, int j, int[] a)
        {
            int temp1;
            temp1 = a[i];
            a[i] = a[j];
            a[j] = temp1;
        }
    }

и это второй файл, который вызывает у меня проблему

import java.util.Scanner;
public class GolfScores
{
    public static double[] diff = new double[5];
    public static void printOutArray(double[] a)
    {
        System.out.println("Sorted array values:");
        for (int i=0; i<a.length; i++)
        {
            System.out.printf("%2.2f",a[i]);
        } //end of for loop
        System.out.println();
        double Handicap= (diff[0])/1*0.96;
        System.out.printf("Handicap: %2.2f",Handicap);
        System.out.println();
    }
    public static void main(String[]args)
    {
        //construct and declare three arrays
        Scanner keyboard = new Scanner(System.in);
        double[] rating = new double[5];
        double[] slope = new double[5];
        double[] score = new double[5];
        int numberUsed = 0;
        int index = 0;

        //Print out directions for the user
        System.out.println("Calculate handicap for 5 games of golf.  This program takes Scores, \nCourse Rating and Slope rating for 5 games. \n\nUsing those figures, the program calculates the differential\nfor each round entered using this formula:(Score - Course Rating) x113 / Slope Rating.  \n\nThen uses the lowest differential to calculate handicap");
        System.out.println();
        //A do while loop that runs until index is great than 5
        do
        {
            System.out.print("Enter golf scores for game " +(index+1)+ ": ");
            score[index]= keyboard.nextDouble();
            System.out.print("Course rating for game "+(index+1)+ ": ");
            rating[index] = keyboard.nextDouble();
            System.out.print("Course slope for game "+(index+1)+": ");
            slope[index] = keyboard.nextDouble();
            index++;
            //index is the number of array indexed variables used so far
        } while((index<5));
        //this formula for all 5 arrays (Score- Course Rating) x 113 / Slope Rating
        diff[0]=((score[0]- rating[0]) * 113 / slope [0]);
        diff[1]=((score[1]-rating[1])*113/slope[1]);
        diff[2]=((score[2]-rating[2])*113/slope[2]);
        diff[3]=((score[3]-rating[3])*113/slope[3]);
        diff[4]=((score[4]-rating[4])*113/slope[4]);

        BubbleSort.sort(diff, diff.length);//passes value of diff array to BubbleSort.sort
        printOutArray(diff);//prints out diff array
    }
}

Ответы [ 2 ]

0 голосов
/ 30 марта 2011

Вы должны убедиться, что типы данных совпадают, как упоминалось до того, как ваш класс BubbleSort работает только с массивом int, этот код был изменен для работы с двойными массивами (что содержит diff).

Когда вы изменили dif на int и получили сообщение «потеря точности», это потому, что вы делаете деление (строки 43-47 в GolfScores.java), а затем присваиваете результат int (которыйотбрасывает дробные значения).

Вот версия BubbleSort, которая компилируется без ошибок и предупреждений.Внесенные мной изменения (их 3) отмечены как комментарии:

public class BubbleSort
{
    public static void sort(double[] a, int numberUsed) //change here
    {
        int index;
        for ( int i =0; i<numberUsed; i++)
        {
            for (index = 0; index<a.length - 1; index++)
            {
                if (a[index]> a[index + 1])
                {
                    interchange(index, index + 1, a);
                } //end of if ()
            } //end of for ()
        } //end of for ()
    }
        private static void interchange(int i, int j, double[] a) //change here
        {
            double temp1; //change here, important
            temp1 = a[i];
            a[i] = a[j];
            a[j] = temp1;
        }
    }

Код можно сделать более гибким, используя объекты вместо примитивных типов (например, сортируйте массив Object вместо double)и, возможно, используя пользовательскую функцию для сравнения элементов, таким образом, вам не нужно будет изменять класс для обработки разных типов данных.Тем не менее, если вы собираетесь использовать гораздо больше возможностей и стандартных библиотек Java, вы можете также использовать метод Arrays.sort. На этой странице объясняется использование встроенных методов сортировки (а также почему вы не должны писать свои собственные процедуры сортировки , если это не какие-то академические задания) лучше, чем я.

0 голосов
/ 30 марта 2011

Ваша сортировка пузырьков работает только с int [], поэтому diff должен быть int [].
И я думаю, что «возможная потеря точности» происходит от

    diff[0]=((score[0]- rating[0]) * 113 / slope [0]);
    diff[1]=((score[1]-rating[1])*113/slope[1]);
    diff[2]=((score[2]-rating[2])*113/slope[2]);
    diff[3]=((score[3]-rating[3])*113/slope[3]);
    diff[4]=((score[4]-rating[4])*113/slope[4]);

Потому что:

    double[] rating = new double[5];
    double[] slope = new double[5];
    double[] score = new double[5];

Эти массивы определены как double [].


И какой тип данных вам нужен, зависит от того, что вы будете вводить.
Если ввод не более чем int, используйте int. Если может появиться число с плавающей точкой, следует учитывать двойное число.

...