【问题标题】:Counting Apples and Oranges, but the oranges dont get counted. Why?计数苹果和桔子,但桔子不被计数。为什么?
【发布时间】:2021-10-13 06:51:18
【问题描述】:

我在 Hackerrank 上练习编码,我实现了一个适用于苹果但不适用于橘子的逻辑。我知道为什么。有什么想法吗?

*//int s = start of the house
// int t = end of the house...
// int a = Apple tree location
// int b = Orange tree location
// Integer apples is a list of numbers.
// Integer oranges is a list numbers aswell. 

逻辑如下: 如果树的位置指向int aint b 加上List<Integer> apples/oranges 的值在st 之间,我们必须将计数器加一。我们对苹果和橙子使用不同的计数器。


public static void countApplesAndOranges(int s, int t, int a, int b, List<Integer> apples, List<Integer> oranges) {
    // Write your code here
    int applesOnhouse = 0;
    int orangeOnhouse = 0;
    List<Integer> house = new ArrayList<>();
    for(int i = s; s < t; s++){
        house.add(i);
    }
    for(int j = 0; j < apples.size(); j++){
        if(house.contains(a + apples.get(j))){
            applesOnhouse++;
            }
    }
    for(int z = 0; z < oranges.size(); z++){
        if(house.contains(b + oranges.get(z))){
            orangeOnhouse++;
        }
    }
    System.out.println(applesOnhouse);
    System.out.println(orangeOnhouse);
    

    }

}

我有点初级,我只是不明白为什么它适用于苹果而不适用于橙子。我只想更深入地了解数组操作、列表操作和逻辑。

【问题讨论】:

  • 你能给那些变量一个更有意义的名字吗?它们的含义是什么?这几乎与学习如何循环数组一样重要。
  • 如果没有一些示例输入以及您对应该产生的结果的期望,我不确定我们能否为您提供帮助。
  • 我能想到的唯一原因是 oranges.size() == 0

标签: java arrays list


【解决方案1】:

您可以使用以下代码并正常工作:

import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.regex.*;

public class Solution {

    // Complete the countApplesAndOranges function below.
    static void countApplesAndOranges(int s, int t, int a, int b, int[] apples, int[] oranges) {
        long np= 0;
        long no= 0;
        for(int i=0;i<apples.length;i++){
            if(a+apples[i]>=s && a+apples[i]<=t){
                np++;
            }
        }
        for(int j=0;j<oranges.length;j++){
            if(b+oranges[j]>=s && b+oranges[j]<=t){
                no++;
            }
        }
        System.out.println(np);
        System.out.println(no);
    }

    private static final Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        String[] st = scanner.nextLine().split(" ");

        int s = Integer.parseInt(st[0]);

        int t = Integer.parseInt(st[1]);

        String[] ab = scanner.nextLine().split(" ");

        int a = Integer.parseInt(ab[0]);

        int b = Integer.parseInt(ab[1]);

        String[] mn = scanner.nextLine().split(" ");

        int m = Integer.parseInt(mn[0]);

        int n = Integer.parseInt(mn[1]);

        int[] apples = new int[m];

        String[] applesItems = scanner.nextLine().split(" ");
        scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

        for (int i = 0; i < m; i++) {
            int applesItem = Integer.parseInt(applesItems[i]);
            apples[i] = applesItem;
        }

        int[] oranges = new int[n];

        String[] orangesItems = scanner.nextLine().split(" ");
        scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

        for (int i = 0; i < n; i++) {
            int orangesItem = Integer.parseInt(orangesItems[i]);
            oranges[i] = orangesItem;
        }

        countApplesAndOranges(s, t, a, b, apples, oranges);

        scanner.close();
    }
}

【讨论】:

  • 谢谢你,Alva,但我试图理解为什么逻辑适用于苹果,但不适用于橙子 :)
  • 这是一个有害的答案 - 提问者显然想学习。 “将其复制/粘贴到您的编辑器并点击提交”并不能解决他们遇到的问题。
  • 用勺子喂食并不能真正帮助人们
  • 嗨,我们来这里是为了帮助这个人 :) 处理他的请求,然后他可以分析代码并获取他需要的东西。让我们变得更好。
【解决方案2】:

学习调试。

调试工作如下:您可以精确地想象您的代码应该做什么。然后,您检查代码的实际作用。如果它不同,你发现了一个错误。修复它,然后重复该过程。继续前进,直到代码完全按照您的想法执行。

例如,打印出house 列表的内容。你会发现,比如说s = 5, t = 8,你的房子列表是[5, 5, 5]。那应该让你走:WTF?然后你意识到你的代码中有一个错误;你应该改写for (int i = s; i &lt; t; i++)

这可能不是唯一的大;继续这个过程。你会找到所有的。

【讨论】:

  • 哥们,你是最棒的。
  • 当然,从编写干净的代码开始会有很大帮助。完成任务的代码行更少意味着要调试的代码行更少。在这种特殊情况下,构造house 列表只是为了能够使用它的contains() 方法,当每个contains() 调用都可以用一个相当简单的表达式替换时,这似乎是非常做作的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-17
  • 2019-02-22
  • 1970-01-01
  • 1970-01-01
  • 2011-02-19
  • 2022-11-24
  • 2010-12-14
相关资源
最近更新 更多