Как исправить «Ошибка: неверные типы операндов для двоичного оператора» в универсальном методе? - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь распечатать определенный диапазон содержимого в массиве. И я обязан использовать универсальный метод, но я продолжаю получать эти ошибки, говоря плохие типы операндов для бинарного оператора. Я хочу спросить, в какой части я сделал это неправильно, и как я могу исправить ошибки?

Я использую Drjava.

  Integer[ ] integerArray = { 1, 2, 3, 4, 5};
  Double[ ] doubleArray = { 1.1, 2.2, 3.3, 4.4, 5.5 };
  Character[ ] characterArray = { 'H', 'E', 'L', 'L', 'O' };
  Pet[ ] petArray = { new Pet( "Bob", "Tortoise", "TSA", "19950315" ),
                      new Pet( "SweetPea", "Horse", "Genie", "20030214" ),
                      new Pet( "Little", "Chicken", "John", "20190123" ),
                      new Pet( "Dale", "Chipmunk", "Sam", "20090527" ),
                      new Pet( "Smokey", "Bear", "USPW", "19440413" )     };

  System.out.printf( "%nRange of integerArray contains:%n" );
  printRange( integerArray, 1, 3); 

  System.out.printf( "%nRange of doubleArray contains:%n" );
  printRange( doubleArray, 1, 3 ); 

  System.out.printf( "%nRange of characterArray contains:%n" );
  printRange( characterArray, 1, 3 ); 

  System.out.printf( "%nRange of petArray contains:%n" );
  printRange( petArray, 1, 3 );

} // end main

// Это часть, в которой я получаю ошибки на

public static <T> void printRange( T[ ] inputArray, T start, T stop ){

 // display array elements 
 // Error:bad operand type T for unary operator '++' and Error: bad operand types for binar operator

    for( T element = start; element < stop; element++ )    
    {
        //Error: bad operand types for binary operator '>='
        first type:  T
        second type: int
        // Error: bad operand types for binary operator '<='
        first type:  T
        second type: T
        //Error: bad operand types for binary operator '<'
        first type:  T
        second type: T
        if( start < stop && start >= 0 && stop <= inputArray[inputArray.length-1] )
        {
            System.out.printf( "%s", element.toString( ) );
        }

    } // end enhanced for loop

    System.out.println( );

} // end method printRange                                    
} // end class ArrayMethods

Это ожидаемый результат. Диапазон integerArray содержит:

2 3

2,2 3,3

E L

1 Ответ

0 голосов
/ 27 апреля 2019

Операции типа ++, > .. разрешены только для числовых типов. Вы должны использовать тип int для переменных start и stop. И легче напечатать определенный диапазон исходного массива, чтобы напечатать его:

public static <T> void printRange(T[] inputArray, int start, int stop) {
    T[] copy = Arrays.copyOfRange(inputArray, start, stop);
    System.out.println(Arrays.toString(copy));
}

Обновление : использование цикла for:

for (int i = 0; i < inputArray.length; i++) {
    if (i >= start && i < stop) {
        System.out.printf("%s ", inputArray[i]);
    }
}
...