【问题标题】:Compilation error, but i can't find the cause编译错误,但我找不到原因
【发布时间】:2015-06-18 17:46:23
【问题描述】:

我正在尝试用 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:
            }   
        }

提前致谢。

【问题讨论】:

  • 你调用transaccionMaquina(Producto, Tarjeta),但方法签名是transaccionMaquina(Tarjeta, Producto) ...你现在看到你的错误了吗?
  • 您的方法被声明为transaccionMaquina(Tarjeta TjtNuevo, Producto PrdNuevo),但您的方法调用使用的是(PrdNuevo, TjtNuevo)。转换你的论点。

标签: java compilation


【解决方案1】:

您的参数在原始方法中是这样定义的:

public boolean transaccionMaquina(Tarjeta TjtNuevo, Producto PrdNuevo)

你这样称呼它:

return transaccionMaquina(PrdNuevo, TjtNuevo);

简而言之,论点是相反的。

【讨论】:

  • 介意解释一下-1吗?
  • 由于两个答案都“立即”被否决了,我认为选民不会告诉你原因。是的,这很烦人。
  • @Tom,很高兴知道 - 只是想确保我没有误解意图。
  • 有时会发生这种情况,您会因为没有(明显的)原因而被否决。我们对此无能为力,但既然你已经在这里有一段时间了,我想你已经知道了:D。
  • 很酷——上次我被否决是因为我完全误解了这个问题:D
【解决方案2】:

您在调用方法时交换了参数,因此与方法签名不匹配:

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

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

【讨论】:

    【解决方案3】:

    您的 sn-ps 对我来说不是很清楚。根据我的解释,调用 transaccionMaquina() 的代码在另一个类中,并且这些类可能不在层次结构中。您需要创建一个 Maquina 类的对象。然后使用它调用 transaccionMaquina。

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

    您可能应该阅读面向对象编程以明确您的概念

    【讨论】:

    • 我同意将参数混淆,但根据代码不能说 pagoProducto() 属于同一类。他也需要对此进行调查。
    猜你喜欢
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多