Java HackerRank Bon应用程序é;未能通过两个测试用例的tit问题

Java HackerRank Bon应用程序é;未能通过两个测试用例的tit问题,java,Java,这是关于HackerRank Bon Appétit的问题。我已经在Java中使用BigDecimal编写了代码。除了两个之外,所有的测试用例都失败了,我不知道为什么。问题是,比尔和安娜两人在一家餐馆。比尔点了安娜可能会过敏的东西。因此,例如,如果账单金额数组为[6,2,4],而anna没有/避免账单[2],则应该拆分账单,如(6+2)/2(如果账单正确)。如果比尔没有正确分摊账单,安娜最终应该得到退款。例如,如果bill将其计算为(6+2+4)/2=16,anna应获得4的退款。如果anna收

这是关于HackerRank Bon Appétit的问题。我已经在Java中使用BigDecimal编写了代码。除了两个之外,所有的测试用例都失败了,我不知道为什么。问题是,比尔和安娜两人在一家餐馆。比尔点了安娜可能会过敏的东西。因此,例如,如果账单金额数组为[6,2,4],而anna没有/避免账单[2],则应该拆分账单,如(6+2)/2(如果账单正确)。如果比尔没有正确分摊账单,安娜最终应该得到退款。例如,如果bill将其计算为(6+2+4)/2=16,anna应获得4的退款。如果anna收取的金额与计算的金额相同,则打印“祝您胃口好”,否则打印anna收取的额外金额

我做了什么

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;

public class BonAppetit {

    // Complete the bonAppetit function below.
    static void bonAppetit(List<Integer> billList, Integer avoidedItemIndex, Integer chargedToAnna) {
        List<BigInteger> billListBigInteger = new ArrayList<>();
        for(Integer bill : billList) {
            billListBigInteger.add(BigInteger.valueOf(bill));
        }
        BigInteger avoidedItem = BigInteger.valueOf(billList.get(avoidedItemIndex));
        BigInteger annasCharge = BigInteger.valueOf(chargedToAnna);
        BigInteger sum = BigInteger.ZERO;
        for(int i=0;i<billListBigInteger.size();i++) {
            if(i != avoidedItemIndex) {
                sum = sum.add(billListBigInteger.get(i));
            }
        }
        //Since there are only two people
        BigInteger split = sum.divide(BigInteger.valueOf(2));
        if(split.equals(annasCharge)) {
            System.out.println("Bon Appetit");
        } else {
            System.out.println(annasCharge.subtract(split).intValue());
        }
    }

    public static void main(String[] args) throws IOException {
        List<Integer> billList = new ArrayList<>();
        File inputFile = new File("BonAppettitTestCase");
        if(!inputFile.exists()) {
            System.out.println("FIle not found, can't continue, exiting");
            return;
        }
        String line;
        BufferedReader fileBufferedReader = new BufferedReader(new FileReader(inputFile));
        while((line = fileBufferedReader.readLine()) != null) {
            String[] splitNumberString = line.split(",");
            for(String number : splitNumberString) {
                billList.add(Integer.valueOf(number));
            }
        }
        bonAppetit(billList, 2814, 249990732);
    }
}
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileReader;
导入java.io.IOException;
导入java.math.biginger;
导入java.util.ArrayList;
导入java.util.List;
公营船艇{
//完成下面的bonAppetit函数。
静态无效bonAppetit(列表billList、整数avoidedItemIndex、整数chargedToAnna){
List billListBigInteger=新的ArrayList();
用于(整型账单:账单列表){
添加(biginger.valueOf(bill));
}
BigInteger AvoidItem=BigInteger.valueOf(billList.get(AvoidedItemEx));
BigInteger Annasharge=BigInteger.valueOf(chargedToAnna);
BigInteger总和=BigInteger.0;

对于(int i=0;i我甚至不知道为什么您要匆忙使用BigInteger

问题很简单,数一数总数,然后减去不需要的食物
k
,将其分割,如果它等于
b
,则是“胃口好”,否则他将退还她一半不需要的元素
k
他向她多收费

像这样的

    static void bonAppetit(List<Integer> bill, int k, int b) {
    int sum=0;
    for(int i=0;i<bill.size();i++){
        sum+=bill.get(i);
    }
    sum-=bill.get(k);
    sum=sum/2;

    if(sum==b){
        System.out.println("Bon Appetit"); 
    }else{
        System.out.println(bill.get(k)/2);
    }

}
static void bonappett(列表票据,int k,int b){
整数和=0;

对于(int i=0;如果有人投了反对票,请给出你为什么这样做的原因。我会编辑这个问题。谢谢。有人能告诉我为什么我会因为这个问题被否决吗?我发布了代码,我尽可能地发布了这个问题。这只是阻止学习程序员在StackOverflow中发布任何这样的问题未来。谢谢。它与您提供的解决方案一起工作。但是,在问题中,假设anna被收取249990732。如果我在计算金额时不包括anna避免的项目,则拆分金额,最后将此拆分金额与anna的收费金额进行比较。如果拆分金额等于anna的收费金额,则为“祝你胃口好”否则,安娜会得到一部分费用的退款。这难道不应该给出正确的答案吗?如果我错了,请纠正我。是的,你是正确的| sum-b |也正确,但错误不在那里。错误是这个if语句(!abillist.equals(avoidetem)){sum=sum.add(abillist)}您没有添加所有与避免项具有相同值的元素,这是错误的,这就是为什么我添加了所有元素,然后只减去我们要避免的元素一次。JadedBeast-您完全正确。我使用了
if(!abillist.equals(avoidetem)){sum=sum.add(abillist);}
而不是
如果(i!=avoidedItemIndex){sum=sum.add(billListBigInteger.get(i));}
这导致了所有问题。我是在比较AvoidNumber元素,而不是比较AvoidIndex。感谢您指出我的错误。我已经用此更正编辑了原始代码,所有测试用例都通过了。