【问题标题】:How to create an equals Method in Java for 2 credit cards如何在 Java 中为 2 张信用卡创建 equals 方法
【发布时间】:2013-10-06 20:52:12
【问题描述】:

所以我在编写代码时遇到了问题,因此我将能够创建一个 equals 方法,如果 2 张信用卡具有相同的安全代码、公司和帐号,则该方法将返回 true。

到目前为止,这是我的代码。

public class CreditCard {

private double balance;
public static double interestRate;
public static String personname;
public static String company;
public static double creditLine;

public CreditCard ()
{
    balance = 0;

}
public static void setIntRate (double rate)
{
    interestRate = rate;
    System.out.println("The Interest rate for this card is : " + interestRate);
}
public static double getIntRate ()
{
    return interestRate;
}

public static void setPersonName (CreditCard card ,String pName)
{
    personname = pName;
    System.out.println("Name on card: " + personname);
}

public static void setCompany (CreditCard card, String compName)
{
    company =compName;
    System.out.println("The Company name is : "+ company);
}
//creates new card number
public static void CardNum (CreditCard card)
{
    int[] accountnumber = new int [16];
    Random generator = new Random ();
     for (int i =0; i<16; i++)
         accountnumber [i] = (int)(Math.random()*10);
    System.out.println ("The Account number for this card is: " + (java.util.Arrays.toString(accountnumber))+"");

     }

//Creates new securitycode
public static void getSecurityCode (CreditCard card)
{
    int[] securitycode = new int [3];
    Random generator = new Random ();
     for (int i =0; i<3; i++)
         securitycode [i] = (int)(Math.random()*10);
    System.out.println ("The security code for this card is: " + (java.util.Arrays.toString(securitycode))+"");
}

public static void setexpirationdate(int MM, int YY)
{
    System.out.println("The expiration date for this card is: " + MM + "/"+ YY + "\n");
}
public static void setCreditLine (int cLine){
    creditLine =cLine;

}
public static void getCreditLine (CreditCard card)
{
    System.out.println( " CreditLine is : $" + creditLine);
}
// buys something
public void buyWithCreditCard (double amount)
{
    balance = balance + amount;

}
//Inserts money to reduce balance
public double paybalance (double amount)
{
    if (balance >= amount){
        balance = balance - amount;
    roundBalance();}
    else{ 
        creditLine = creditLine + (amount - balance);
        balance = 0;
        System.out.println("Your new CreditLine is: "+creditLine);
        roundBalance();
    }

    return amount;
}

// adds interest to balance
public void addInterest ()
{

    double interest = balance * getIntRate ();
    balance = balance + interest;
    roundBalance ();    
}

private void roundBalance ()
{
    balance = (double)(Math.round(balance*100))/100;

}
public double checkBalance (){
    return balance;
}
//Shows Credit Card Debt
public static void showBalance (CreditCard card)
{
    System.out.print(card.balance);
}

}

然后是使用 CreditCard 类的类。

public class CreditCardDemo {
public static void main (String [] args)
{

    //Creates cards 1 and 2
    CreditCard firstCard = new CreditCard ();
    CreditCard secondCard = new CreditCard ();
    //Calls for card info 1 
    System.out.println("First card Information is:");
    CreditCard.setPersonName(firstCard,"John White");
    //CreditCard.getName(firstCard);
    CreditCard.setCreditLine(600);
    CreditCard.getCreditLine(firstCard);    
    CreditCard.setCompany(firstCard,"Visa");
    CreditCard.setIntRate(0.02);
    CreditCard.CardNum(firstCard);
    CreditCard.getSecurityCode(firstCard);
    CreditCard.setexpirationdate(11, 17);
    //call for card info 2

    System.out.println("Second card Information is:");
    CreditCard.setPersonName(secondCard,"Jack Black");
    CreditCard.setCreditLine(2600);
    CreditCard.getCreditLine(secondCard);
    //CreditCard.getName(secondCard);
    CreditCard.setCompany(secondCard,"Discover");
    CreditCard.setIntRate(0.02);
    CreditCard.CardNum(secondCard);
    CreditCard.getSecurityCode(secondCard);
    CreditCard.setexpirationdate(10, 19);

    //Purchases
    System.out.println("\nYou bought something for $5.00");
    firstCard.buyWithCreditCard (5.00);
    System.out.println("You bought another item for $12.00");
    firstCard.buyWithCreditCard(12.00);
    System.out.println("You bought another item for $15.00");
    firstCard.buyWithCreditCard(15.00);
    System.out.println("You bought another item for $33.42");
    firstCard.buyWithCreditCard(33.42);

    //Display Current Balance
    System.out.print("You currently owe: $");
    CreditCard.showBalance(firstCard);


    //Interest Adds onto it
    if (firstCard.checkBalance () > 50.00){
    System.out.println("\nInterest has been added");
    firstCard.addInterest ();
    System.out.print("Your new balance is : $");
    CreditCard.showBalance(firstCard);
    System.out.println("");
    //Payment
    System.out.println("You have overpaid your balance.");
    firstCard.paybalance (70);
    System.out.print("Your new balance is : $");

    CreditCard.showBalance(firstCard);

    }

}

}

因此,如果有人能告诉我如何在 CreditCard 类中创建一个方法,让我可以检查 firstCard 和 secondCard,那就太好了。非常感谢:)

【问题讨论】:

  • 你试过什么?无论如何,不​​要忘记也实现hashCode(),以便它验证equals 合约。
  • 你为什么在 CreditCard 类中设置方法 static

标签: java class methods


【解决方案1】:

如果您使用 NetBeans,您可以简单地自动生成 equals 函数(不确定 Eclipse)。除此之外,它归结为覆盖Objectequals 函数。

确保检查两者是否属于同一类并确保检查 null。 Java 建议也覆盖 hashCode 函数,但这取决于您的用例。

【讨论】:

  • Eclipse还支持自动生成equals函数。
【解决方案2】:

首先,我在java 方面并没有那么先进,但这看起来还是很简单的。 这里的问题似乎从来没有保存安全代码(getSecurityCode方法是无效的,所有变量都是本地的) 公司也是如此

尽管如此,这里有一个示例,假设您已修复该问题并创建了一个返回代码(作为 int)的方法 getCode 和一个返回该数字(作为 int)的方法 getAccountNumber。 (假设公开这些方法没有问题)

public boolean equals(CreditCard creditCard1, CreditCard creditCard2){
if (creditCard1 == null || creditCard2 == null)
    return creditCard1 == creditCard2;
boolean equalCode = (creditCard1.getCode() == creditCard2.getCode());
boolean equalCompany = creditCard1.company.equals(creditCard2.company);
boolean equalAccountNumber = (creditCard1.getAccountNumber() == creditCard2.getAccountNumber());
return equalCode && equalCompany && equalAccountNumber;
}

最好将变量设为私有并创建一些 getter,但这取决于您。

【讨论】:

  • 虽然这段代码可以工作,但它会破坏 Java 对 equals 的定义,并使该类在排序列表或类似列表中不可用。 Aaand...没有空检查。 ;)
  • 是的,我这样做了,因为这是他定义信用卡相等条件的方式。如果这正是您想要检查相等信用卡的方式,那么使用不同的名称会更好。 (我会添加一些空检查)
  • 不,你没有......因为你使用了对象身份检查而不是平等检查......stackoverflow.com/questions/1692863/…
  • @cljk 我没有...打破他的课堂或正确回答他的问题?我总是假设有人指出我的错误是正确的,但这确实很奇怪,因为我经常看到 equals 以类似的方式被使用。
  • 如果你想实现相等检查,你可以对简单类型(int、byte ...)使用“==”,但对对象必须使用“equals”。我假设“代码”是一个字符串,它是一个对象 - 所以....会是smth。像“booelan eq = creditCard1.getCode().equals(creditCard2.getCode())” - 但是你必须假设代码总是!= null。同样正如“TheTwo”所说,在大多数情况下,在现实生活中通常需要进行空检查......
猜你喜欢
  • 1970-01-01
  • 2011-08-08
  • 1970-01-01
  • 2019-02-07
  • 1970-01-01
  • 1970-01-01
  • 2023-02-22
  • 2019-05-13
相关资源
最近更新 更多