【问题标题】:Java array logic [closed]Java数组逻辑
【发布时间】:2015-04-07 14:49:28
【问题描述】:

我的程序需要:

  • 返回数组中数字的总和,忽略的部分除外 以 6 开头并延伸到下一个 7 的数字(每 6 个 后跟至少一个 7)

  • 返回 0 表示没有数字

例子:

sum67({1, 2, 2}) → 5
sum67({1, 2, 2, 6, 99, 99, 7}) → 5
sum67({1, 1, 6, 7, 2}) → 4

我试过了,但它不适用于接下来的 6 和 7

public int sum67(int[] nums) {
    int sixIndex=0;
    int sevenIndex=0;
    int sum = 0, flag=0;

    if(nums.length !=0) {
        for(int a=0; a<nums.length; a++) {
            if(nums[a] == 6 ) {
                flag = 1;
                break;
            }
        }

        if(flag == 1) {
            for(int i =0; i < nums.length; i++) {
                if(nums[i] == 6) sixIndex= i;
                if(nums[i] == 7) sevenIndex = i;
            }

            for(int j = 0; j<nums.length; j++) {
                if(j == sixIndex) break;
                sum+=nums[j];
            }

            for(int k = sevenIndex+1; k<nums.length; k++) {
                if(k == sevenIndex) break;
                sum+=nums[k];
            }

        }

        else {
            for(int b = 0; b<nums.length; b++) {
                sum+=nums[b];
            }
        }
   }

   return sum;
}

【问题讨论】:

  • 请澄清您的具体问题或添加其他详细信息以准确突出您的需要。正如目前所写的那样,很难准确地说出你在问什么。
  • 我猜这是作业。这是来自 codingbat (codingbat.com/prob/p111327) 的练习。 StackOverflow 不是一个让人们为你完成作业的网站。我们需要一个具体的问题。
  • 这读起来就像你只是在这里复制和粘贴你的作业。请展示您到目前为止的尝试并解释您的实际问题。
  • 别偷懒。自己试试这个。把自己扔到问题上。让你的大脑受伤。斗争。将其全部删除,然后重试。尝试。尝试。再试一次。不要让别人给你灌汤式的答案,从而剥夺你的学习体验。
  • 我试过但忘记写下我的努力,但在编辑问题之前我得到了 -6 :(。现在我已经更新了我的问题

标签: java arrays


【解决方案1】:

这段代码应该可以解决问题。变量 c 跟踪我们是否在 6-7 块之间。

class Potato
{
    int sum67(int arr[])
    {
        boolean c = false;
        int sum = 0;
        for (int x : arr)
        {
            if (x == 6)// stop adding
                c = true;
            else if (x == 7 && c)// start adding, but only when stopped
                c = false;
            else if (!c)// add only if not stopped
                sum += x;
        }
        return sum;
    }
}

后记:当您开始编码时,即使是最简单的事情也可能成为障碍。伙计们,做个好人。

【讨论】:

  • @SycoUraz 如果您不熟悉 for 循环的压缩版本,它的作用就是一个接一个地遍历数组中的每个数字,并将当前数字保留在名为X。相当于普通的for循环,
  • @xrish 在我看来,给他一个带有答案的代码转储对任何人都没有帮助。可以说,这弊大于利。
  • @Kon 我没有征求你的意见。这家伙想要一些帮助。可以说,将代码粘贴到 any 问题可能是有害的。一个问题的优劣不取决于它是否引用了代码的某些晦涩或复杂的方面。仅仅因为一个问题对你来说似乎很简单,并不意味着它对其他人来说很简单。
  • 没有礼貌。问题不在于问题简单。问题是他发布了带有错误的代码,而您只是将答案转储给了他。好的,太好了,他现在有答案了。但他什么也没学到。而且你没有更正他的代码或解释他的想法为什么是错误的。该网站旨在帮助人们自己编写更好的代码,而不是帮助人们获得正确的答案。
  • @xrisk 我同意你的看法。这个stackoverflow不仅适用于专家,也适用于他们在执行某些任务时卡住的初学者。我不知道为什么每个人都希望专家发布问题。如果他们不喜欢这个答案,或者如果它看起来太简单,那么为什么他们不能简单地忽略它并浏览他们感兴趣的问题。“不是每个人都是完美的,即使是高手指点也需要在成为专家之前"
【解决方案2】:

你只能使用一个循环来代替jk 循环

 for(int j = 0; j<nums.length; j++){
        if(!((j>=sixIndex) && (j<=sevenIndex))) 
        sum +=nums[j];
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多