2014-02-08 3 views
0

Добрый день. Я изучаю java последние несколько месяцев. Поэтому я создал общий массив следующим образом.Работа с генераторными массивами

public class Implementation<T> implements IMatrix<T>{ 

    private T[][] genMatrix; 
    private Integer numberRows; 
    private Integer NumberCols; 
    public Implementation(){ 
     generateMatrix(); 
     for(int i = 0;i< numberRows;i++) 
     { 
      for(int j =0;j< numberCols;j++) 
      { 

       JOptionPane.showInputDialog("Enter value for row " + (i+1) + " and for column " + (j+1))) 

      } 
     } 
      multiplyScalar(5); 

    } 
    //generate the array 
    public void generateMatrix(){ 
     String rowString = JOptionPane.showInputDialog("Enter the number of rows!"); 
     numberRows = Integer.parseInt(rowString); 
     String colString = JOptionPane.showInputDialog("Enter the number of cols!"); 
     numberCols = Integer.parseInt(colString); 

     final Object[][] arrayO = (T[][])new Object[numberRows][numberCols]; 
     genMatrix = (T[][])arrayO; 
    } 
    //writeElements to the array; 
    public void writeElem(int x, int y, T value){ 

      genMatrix[x][y] = value; 
    } 
    //now that those members are done I have created a method to access the data 
    public T getElem(Integer i, Integer j){ 
      return (T)genMatrix[i][j]; 
    } 

Здесь моя проблема существует. Я сделал этот двухмерный массив. Я хотел бы умножить каждое значение в этом массиве на Integer c. Я попытался сделать это следующим образом, и все провалилось.

public IMatrix<T> multiplyScalar(Integer c) throws MatrixException { 
    // TODO Auto-generated method stub 


    for(int i = 0; i< numberRows; i++) 
    { 
     for(int j=0;j<numberCols;j++) 
     { 
      /** 
           THIS IS THE POINT AT WHICH IT CRASHES 
          */ 
      System.out.println(((Integer)(getElement(i, j)) * c)); 


     } 
    } 

    return null; 
} 
} 

Программа вылетает из-за исключения ClassCastException. Я пробовал все, что было в моих силах, чтобы заставить это работать. Я не могу умножить двумерный массив на Integer. Пожалуйста помоги. Это использует интерфейс со многими другими функциями, которые не имеют отношения к делу. Обратите внимание, что существует большая вероятность того, что этот код сработает, поскольку я не могу загрузить исходный код.

+1

является '' T' Integer' при запуске программы? Если не актерский состав не может работать ... – assylias

+0

Здесь объясняется спокойно. http://stackoverflow.com/questions/10468853/predefining-multiplication-for-generics-in-java – user1945457

+1

@assylias no T не является Целочисленным. Как я могу получить Integer – Jonathan

ответ

1

Проблема в том, что Java не поддерживает полиморфизм оператора. Вам нужно T, чтобы увеличить число, а затем использовать вызовы методов. Это немного более многословно, чем то, что может понравиться. Его объяснил тихо здесь хорошо:

Predefining multiplication for generics in java

Смежные вопросы