2015-06-18 58 views
-4

我想編譯一個Java代碼來返回一個布爾值,他調用另外兩個方法,但由於某種奇怪的原因,不識別該方法的名稱。編譯錯誤,但我找不到原因

編譯器給我這個錯誤: 找不到符號,方法transaccionMaquina(PRODUCTO,TARJETA)

下面是代碼:

import java.util.Scanner; 
public class Maquina 
{ 
    Maquina() 
    { 
    } 


    public boolean transaccionMaquina(Tarjeta TjtNuevo, Producto PrdNuevo) 
    { 
       if (PrdNuevo.getPrecio()<= TjtNuevo.getSaldoTarjeta()) 
       { 
        PrdNuevo.setStock(PrdNuevo.getStock()-1); 
        TjtNuevo.setSaldoTarjeta(TjtNuevo.getSaldoTarjeta()-PrdNuevo.getPrecio()); 
        return true; 
       } 
       else 
       { 
        return false; 
       } 
    } 
} 

任何疑問,建議或建設性的批評,將是非常讚賞

這裏是代碼的類擁有我打電話的方法

這裏是我嘗試添加它的菜單類裏面的地方

// MÉTODOS (Ver Después) 

public boolean ventaEfectivo(Producto PrdNuevo, Cliente ClntNuevo) 
{ 
    int intPrecio = PrdNuevo.getPrecio(); 
    int intDineroDisponible = ClntNuevo.getDineroDisponible(); 
    int intStock = PrdNuevo.getStock(); 
     if (intDineroDisponible>=intPrecio) 
     { 
      intDineroDisponible = intDineroDisponible - intPrecio; 
      ClntNuevo.setDineroDisponible(intDineroDisponible); 
      intStock = intStock - 1; 
      PrdNuevo.setStock(intStock); 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
} 

public boolean pagoProducto(Producto PrdNuevo, Cliente ClntNuevo, Tarjeta TjtNuevo, int intOpcion) 
     { 
      switch(intOpcion) { 
       case 1: 

        return ventaEfectivo(PrdNuevo, ClntNuevo); 

       break; 

       case 2: 

        return transaccionMaquina(PrdNuevo, TjtNuevo); 
       break; 

       default: 
      } 
     } 

在此先感謝。

+2

你叫'transaccionMaquina(PRODUCTO,TARJETA)',但該方法的簽名是'transaccionMaquina(TARJETA,PRODUCTO)'... DO你現在看到你的錯誤? – Tom

+1

你的方法被聲明爲'transaccionMaquina(Tarjeta TjtNuevo,Producto PrdNuevo)',但你的方法調用正在使用'(PrdNuevo,TjtNuevo)'。改變你的觀點。 – CubeJockey

回答

0

你的參數在原來的方法定義是這樣的:

public boolean transaccionMaquina(Tarjeta TjtNuevo, Producto PrdNuevo) 

你說它是這樣的:

return transaccionMaquina(PrdNuevo, TjtNuevo); 

總之,參數被顛倒。

public boolean transaccionMaquina(Tarjeta TjtNuevo, Producto PrdNuevo) { ... } 

public boolean pagoProducto(Producto PrdNuevo, Cliente ClntNuevo, Tarjeta TjtNuevo, int intOpcion){ 
    ... 
    case 2: return transaccionMaquina(PrdNuevo, TjtNuevo); 
    .... 
} 
+2

介意解釋-1? – bedwyr

+1

既然這兩個答案都是「立即」下調的,我不認爲選民會告訴你爲什麼。是的,這很煩人。 – Tom

+0

@Tom,很高興知道 - 只是想確保我沒有誤解意圖。 – bedwyr

0

調用你的方法,因此這並不方法簽名匹配,當你交換的參數。根據我的解釋,調用transaccionMaquina()的代碼位於另一個類中,可能這些類不在層次結構中。你需要創建一個Maquina類的對象。然後使用它調用transaccionMaquina。

Maquina m = new Maquina(); 
m.transaccionMaquina() 

你或許應該閱讀面向對象的編程來清除概念

0

您的片段對我來說並不很清楚:

+0

我同意paramteres被混淆,但基於代碼不能說pagoProducto()是在同一類。他也需要考慮這一點。 – learningMyWayThru