Некоторые сообщения были упрощены; перекомпилировать с -Xdiags: многословно, чтобы получить полный вывод? - PullRequest
0 голосов
/ 07 мая 2018

Итак, я пишу алгоритм сортировки выбора, который превращает все части сортировки в методы. Однако, когда я его компилирую, он возвращает ошибку:

Примечание: некоторые сообщения были упрощены; перекомпилировать с -Xdiags: многословно, чтобы получить полный вывод

Что я делаю не так?

import java.io.*;
    public class Driver01
   {
       public static void main(String[] args)
      {
        //input
         double[] myArray = {2.0, 3.7, 9.9, 8.1, 8.5, 7.4, 1.0, 6.2};

        //sort the array
         double[] sorted = process(myArray);

        //output
         System.out.print("" + sorted);



      }
      private static double findMax( int EndIndex, double[] enterArray) {
         double max = 0;
         int trueIndex = 0; 
         for( int x = 0; x < EndIndex; x++) {
               if(enterArray[x] > max) {
                  max = enterArray[x];
                  trueIndex = x;
               }
               }

      return trueIndex;
      }
      private static void swap(int swap1, int swap2, double[] enterArray) {
         double temp = 0;
         temp = enterArray[swap1];
         enterArray[swap1] = enterArray[swap2];
         enterArray[swap2] = enterArray[swap1];

      }
      private static double[] process(double[] enterArray) {
         int range = enterArray.length -1;
         for( int x = 0; x < enterArray.length-1; x++) {
            double j = findMax(range, enterArray);
            swap(j, range, enterArray);
            range = range -1;
         }
         return enterArray;
      }
      }

Пересмотренный код:

import java.io.*;
    public class Driver01
   {
       public static void main(String[] args)
      {
        //input
         double[] myArray = {2.0, 3.7, 9.9, 8.1, 8.5, 7.4, 1.0, 6.2};

        //sort the array
         double[] sorted = process(myArray);

        //output
         System.out.print("" + sorted);



      }
      private static int findMax( int EndIndex, double[] enterArray) {
         double max = 0;
         int trueIndex = 0; 
         for( int x = 0; x < EndIndex; x++) {
               if(enterArray[x] > max) {
                  max = enterArray[x];
                  trueIndex = x;
               }
               }

      return trueIndex;
      }
      private static void swap(int swap1, int swap2, double[] enterArray) {
         double temp = 0;
         temp = enterArray[swap1];
         enterArray[swap1] = enterArray[swap2];
         enterArray[swap2] = enterArray[swap1];

      }
      private static double[] process(double[] enterArray) {
         int range = enterArray.length -1;
         for( int x = 0; x < enterArray.length-1; x++) {
            int j = findMax(range, enterArray);
            swap(j, range, enterArray);
            range = range -1;
         }
         return enterArray;
      }
      }

Теперь код печатает массив, который выглядит следующим образом: [D @ 15db9742 Что сейчас не так?

1 Ответ

0 голосов
/ 07 мая 2018

Полное сообщение об ошибке:

Driver01.java:41: error: incompatible types: possible lossy conversion
                         from double to int
            swap(j, range, enterArray);
                 ^
Note: Some messages have been simplified; recompile with -Xdiags:verbose
      to get full output
1 error

Из этого ясно, что вы вызываете swap с аргументом double, когда он ожидает аргумент int.

Сейчас я не собираюсь предлагать решение, но я бы посоветовал вам внимательно посмотреть, что делает findMax и что оно возвращает. Особенно возврат тип !

(Часть проблемы здесь в том, что имя переменной findMax вводит в заблуждение. Метод не делает того, что подразумевает имя.)

...