1

我已经完成了大部分工作。任何人都给我一个小提示,告诉我如何在列表中找到 10 的数量。例如。输入将是

[10,4,6,10,6,7]

输出必须是

[4,6,6,7,0,0]

import java.util.ArrayList;
import java.util.List;

public class prob64 {
   public static List output;
   public static void getVal(List ll)
   {
       int count=0;
       List ll1=new ArrayList();
       for(int i=0;i<ll.size();i++)
       {
           if((int)ll.get(i)!=10)
           {
               ll1.add(ll.get(i));
           }
           if((int)ll.get(i)==10)
           {
               count++;
           }
       }
       if(count>0)
       {
          ll1.add(8);
       }   
       output=ll1;
       System.out.println(output);
   }

   public static void main(String[] args) {
        List<Integer> ll=new ArrayList();
        ll.add(10);
        ll.add(1);
        ll.add(10);
        ll.add(2);
        prob64.getVal(ll);
   }
}

我得到的当前输出是[1,2,0]. 我应该得到[1,2,0,0]

4

4 回答 4

3

List.remove(Object)删除第一个匹配元素。它还返回一个布尔值,指示是否确实完成了删除,所以这应该有效:

while(ll.remove(10)) {
  ll.add(0);
}

也就是只要找到10s要去掉,就加0s。请注意,List.add在列表末尾添加元素,这是您的要求(如果我是正确的)。

我想这是一种学习练习,但我建议您为变量找到更好的名称(ll&ll1不会使您的函数易于阅读)。

于 2013-03-03T13:15:02.993 回答
2

您在循环结束时仅添加一个零(以防找到10)。您应该计算10的数量,然后添加与该数字一样多的零。您的程序应如下所示:

int count=0;
List ll1=new ArrayList();
for(int i=0;i<ll.size();i++)
{
    if((int)ll.get(i)!=10)
       ll1.add(ll.get(i));
    else
       count++;
}

for(int j=0; j<count;j++)
    ll1.add(0);
于 2013-03-03T13:17:54.813 回答
1

如果count是要添加的 10 的数量,请使用:

for(int j=0; j<count;j++){
    ll1.add(8); // or ll1.add(0); ???
}
于 2013-03-03T13:10:25.177 回答
0

其他人在上面提到的几点要补充

  1. 我看不出有什么理由必须将输出 List 定义为static。当您将某些东西(变量/函数)定义为静态时,它们归类而不是对象所有,并且不使用实例函数更改它们也是一种很好的编程习惯。我的意思是,如果您只想打印,则没有需要该输出实例变量。可以直接打印ll1。
  2. 请在您的代码中使用泛型。当您知道列表中的所有内容都是整数时,请指定它 - 即使在函数getVal () 中也是如此。我不知道您的代码是如何编译的,但您不能将 Object 转换为 int

    (int)ll.get(i)!=10
    

    此代码将失败。尝试使用整数而不是 int。

  3. 您的问题陈述阅读用 0 替换所有 10。那你为什么要加8呢。一定是

    ll1.add(0);
    

    正如其他人指定的那样,您需要添加 0 与您的计数一样多。所以需要另一个循环。休息一切看起来不错。

于 2013-05-18T12:25:44.480 回答