2013-03-10 93 views
0

我試圖從類「Operatii」執行一個方法。該方法寫在「PolinomIntreg」類中。問題是,當執行時,程序會進入無代碼的代碼,而不是代碼。Java中的替代方法

我該怎麼做才能讓程序進入有代碼的程序?

PolinomIntreg類:

import java.util.Scanner; 


public class PolinomIntreg<INTEGER> implements IPolinom<INTEGER> { 

int grad1, grad2, x, i; 
double val = 0; 

int[] pol1 = new int[100]; 
int[] pol2 = new int[100]; 
int[] pol3 = new int[200]; 

public void grad(int grad1, int grad2){ 

    System.out.println("Introduceti gradele celor doua polinoame: "); 
    Scanner in = new Scanner(System.in); 
    this.grad1 = in.nextInt(); 
    this.grad2 = in.nextInt(); 


} 


public void coef(int pol1[], int pol2[], int grad1, int grad2){ 

    System.out.println("Introduceti coeficientii reali ai primului polinom: "); 

    for(i = 0; i < this.grad1; i++) 
    { 
     Scanner in = new Scanner(System.in); 
     pol1[i] = in.nextInt(); 
    } 

    System.out.println("Introduceti coeificientii reali ai celui de al doilea polinom: "); 

    for(i = 0; i < this.grad2; i++) 
    { 
     Scanner in = new Scanner(System.in); 
     pol2[i] = in.nextInt(); 
    } 
} 

public void add(int pol1[], int pol2[], int grad1, int grad2){ 

    if(this.grad1 > this.grad2) 
    { 
     for(i = 0; i < this.grad1 ; i++) 
      pol1[i] = pol2[i] + pol1[i]; 
    } 
    else 
     for(i = 0; i < this.grad2 ; i++) 
      pol2[i] = pol2[i] + pol1[i]; 
} 

public void substract(int pol1[], int pol2[], int grad1, int grad2){ 

    if(this.grad1 > this.grad2) 
    { 
     for(i = 0; i < this.grad1 ; i++) 
      pol1[i] = pol2[i] - pol1[i]; 
     afisare(pol1,this.grad1); 
    } 
    else 
     for(i = 0; i < this.grad2 ; i++) 
      pol2[i] = pol2[i] - pol1[i]; 
     afisare(pol2,this.grad2); 

} 

public void value(int pol1[], int grad1){ 


    System.out.println("Introduceti o valoare pentru x: "); 
    Scanner in = new Scanner(System.in); 
    x = in.nextInt(); 

    for(i = 0; i < this.grad1; i++) 
     val = val + pol1[i] * Math.pow(x,i); 

    System.out.println("Valoarea polinomului in punctul" + x + " este " + val); 
} 

public void afisare(int pol1[], int grad1){ 

    for(i = grad1 - 1; i >= 0; i--) 
     System.out.println(pol1[i] + "^" + i + "+ "); 
} 


public void multiply(int pol1[], int pol2[], int grad1, int grad2){ 

    int j = 0; 

    for (i = 0; i < this.grad1 ; i++) 
     for (j = 0; j < this.grad2 ; j++) 
     { 
      pol3[i+j] = pol3[i+j] + pol1[i] + pol2[j]; 
     } 
} 


@Override 
public void add(INTEGER[] pol1, INTEGER[] pol2, INTEGER grad1, INTEGER grad2) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void value(INTEGER[] pol1, INTEGER grad1) { 
    // TODO Auto-generated method stub 

} 


@Override 
public void multiply(INTEGER[] pol1, INTEGER[] pol2, INTEGER[] pol3, 
     INTEGER grad1, INTEGER grad2, INTEGER grad3) { 
    // TODO Auto-generated method stub 

} 


@Override 
public void grad(INTEGER grad1, INTEGER grad2) { 


} 


@Override 
public void coef(INTEGER[] pol1, INTEGER[] pol2, INTEGER grad1, 
     INTEGER grad2) { 
    // TODO Auto-generated method stub 

} 


@Override 
public void afisare(INTEGER[] pol1, INTEGER grad1) { 
    // TODO Auto-generated method stub 

} 


@Override 
public void substract(INTEGER[] pol1, INTEGER[] pol2, INTEGER grad1, 
     INTEGER grad2) { 
    // TODO Auto-generated method stub 

} 

} 

Operatii類:

import java.util.Scanner; 


public class Operatii { 

static Integer[] pol1 = new Integer[100]; 
static Integer[] pol2 = new Integer[100]; 
static Integer[] pol3 = new Integer[200]; 
static public Integer grad1, grad2,grad3, x, i; 

static Float[] pol11 = new Float[100]; 
static Float[] pol21 = new Float[100]; 
static Float[] pol31 = new Float[200]; 
    static Float grad11, grad21, grad31; 
Float x1; 


public static void main(String args[]){ 

    IPolinom<Integer> poli = new PolinomIntreg<>(); 
    IPolinom<Float> polr = new PolinomReal<>(); 

    System.out.println("Apasati 1 pentru operatii cu polinoame cu coef reali"); 
    System.out.println("Apasati 0 pentru operatii cu polinoame cu coef intregi"); 

    Scanner in = new Scanner(System.in); 
    int meniu = in.nextInt(); 

    if(meniu == 0){ 

    poli.grad(grad1, grad2); 
    poli.coef(pol1, pol2, grad1, grad2); 
    poli.add(pol1, pol2, grad1, grad2); 
    //poli.multiply(pol1, pol2, pol3, grad1, grad2, grad3); 
    //poli.value(pol1, grad1); 
    //poli.afisare(pol1, grad1); 
    //poli.afisare(pol2, grad2); 

      } 

    else if (meniu == 1){ 
     polr.grad(grad11, grad21); 
     polr.coef(pol11, pol21, grad11, grad21); 
     polr.add(pol11, pol21, grad11, grad21); 
     polr.multiply(pol11, pol21, pol31, grad11, grad21, grad31); 
     polr.value(pol11, grad11); 
     polr.afisare(pol11, grad11); 
     polr.afisare(pol21, grad21); 
    } 

    else System.out.println("Eroare introducere optiune! "); 



} 

} 

IPolinom是一個接口。

+0

這太明顯是不相關的代碼。你能否提供一個你正面臨的問題的例子,而不是把你的任務細節搞亂? – millimoose 2013-03-10 15:23:58

+0

你試圖打電話的方法是什麼? – christopher 2013-03-10 15:24:39

+0

我想調用poli.add(pol1,pol2,grad1,grad2)方法。它不會執行我編寫代碼的地方。它執行覆蓋部分。問題是,如果meniu == 0多項式具有整數係數,並且如果meniu == 1它具有浮動係數。 – 2013-03-11 17:45:05

回答

1

如果我正確理解你的問題,如果你正試圖調用add方法,那麼你試圖調用add方法,該方法在最後具有'Integer'變量,所以如果你聲明你的grad變量是鍵入'int',那麼它將轉到有代碼的方法。

所以更準確地說:

poli.add(pol1, pol2, grad1, grad2); here grad1 and grad2 are type of Integer. Declare grad1 and grad2 to be int then the add method which has code will be called. 

聲明grad1和grad2像

int grad1, grad2; 

更新:

也改變POL 1和POL的類型爲int類型的

static int[] pol1 = new int[100]; 
    static int[] pol2 = new int[100]; 
+0

我宣佈從Operatii類int grad1和grad2變量,仍然不會調用方法與代碼 – 2013-03-11 19:03:30

+0

@DragosMihaiMarcean剛剛意識到你的pol1和pol2是Integer類型的數組聲明它們的類型爲int,然後它會被調用,我有更新我的答案 – 2013-03-11 22:50:34

1

您不是覆蓋方法。爲了覆蓋,您需要使用確切簽名(您使用int而不是Integer)。我建議你將所有代碼複製到「無代碼方法」(或自動生成的方法)中,並刪除非覆蓋方法。

順便說一句,這是最終爭論的力量使用@Override註釋。如果你試圖添加它 - 你會看到你的代碼沒有覆蓋任何方法。

1

從你的代碼中似乎有在簽名中的一些方法與INTEGER等人用int,例如

public void afisare(int pol1[], int grad1){ 

} 

@Override 
public void afisare(INTEGER[] pol1, INTEGER grad1) { 
    // TODO Auto-generated method stub 

} 

你寫有int簽名和Interface的方法有INTEGER簽名的方法。你不是在重寫你只是寫不同的方法。

將您的實施代碼移入具有正確簽名的方法中。

1
public void value(int pol1[], int grad1) 

public void value(INTEGER[] pol1, INTEGER grad1) 

是不同的。您正在調用public void value(INTEGER[] pol1, INTEGER grad1),它沒有實現。

+0

我試圖實現代碼公共無效值(INTEGER [] pol1,INTEGER grad1),但我不知道如何調用掃描儀INTEGER – 2013-03-11 17:47:40