在arraylist中更改值

时间:2016-10-07 04:36:39

标签: java arraylist

我有boolean arraylist,其中有100个谬误。

我想更改arraylist中的每个x值。 x = 1也是如此,如果[false,true,false,true,false],则每个其他值都会更改x = 2,每两个值都会发生变化。我已经工作了几个小时,我仍然无法得到它。在这个网站上询问是我的最后一个选择。

这是我的......

public void changeValues(int x){

    int d = x + 1;
    x-=1;
    int i = 0;

    while (x <= arrayList.size()){

        if (arrayList.get(x) == false){

            arrayList.add(x,true);
        } else {

            arrayList.add(x,false);
        }
        x+=d; 
        if(x == arrayList.size()){ 
            break;
        } 
    } 
    System.out.print(arrayList);
 }

7 个答案:

答案 0 :(得分:2)

首先,add在指定的索引之后添加元素,而不是设置它。

其次你混合x和循环索引变量会导致完全错误的结果(我假设它抛出ArrayIndexOutOfBoundException)。

实施实际上非常简单:

for (int i = x; i < arrayList.size(); i += x+1) {
    arrayList.set(i, true);
    // or arrayList.set(i, !arrayList.get(i)) if you want to negate the value
}

答案 1 :(得分:1)

class CmsController extends Controller
{
    public $enableCsrfValidation = false;
    public $layout="listing";
    public function behaviors()
    {
       .........
    }
}

然而要测试代码,但我想这正是你要找的。希望它有所帮助:)

答案 2 :(得分:0)

使用Set而不是add。

添加将指定的元素追加到此列表的末尾或指定的索引处。

Set将替换它。

答案 3 :(得分:0)

你必须修改值而不是添加新的val。使用以下代码以获得上述格式的输出

   public void changeValues(int x){
        ArrayList<Boolean> list = new ArrayList<Boolean>(); 
        //From question -> that is filled with 100 falses.
        list.add(false);

        int listSize = list.size();
        for (int i = x; i < listSize; i += x + 1) { 
            list.set(i, true);            //Works for x=1
            if (x == 2 && i+1 < listSize) {  
                list.set(i + 1, true);    //Works for x=2
            }
        }
        System.out.println(list);
   }

x=1

的输出
[false, true, false, true, false]

x=2

的输出
[false, false, true, true, false]

答案 4 :(得分:0)

使用Java 8,您可以通过检查IntStream中是否index % x == 0来制定解决方案:

final int size = 100;
final int gap = x + 1;
List<Boolean> list = IntStream.rangeClosed(1, size)
                              .mapToObj(num -> num % gap == 0)
                              .collect(Collectors.toList());
System.out.println(list);

Ideone Demo

答案 5 :(得分:0)

(我建议始终发布MCVE

oauthswift = OAuth2Swift(
    consumerKey:    "********",
    consumerSecret: "********",
    authorizeUrl:   "your authorisation url",
    responseType:   "token"
)
let handle = oauthswift.authorize(
    withCallbackURL: URL(string: "oauth-swift://oauth-callback/fitbit")!,
    scope: "your application scope", state:"state",
    success: { credential, response, parameters in
      print(credential.oauth_token)
    },
    failure: { error in
      print(error.localizedDescription)
    }
)

答案 6 :(得分:0)

请检查一下,我认为它会像你要找的那样工作:

public class ChangeValue{
        public static void main(String[] args) {
                List arrayList = new ArrayList<Boolean>();
                for (int i = 0; i < 100; i++) {
                    arrayList.add(false);
                }
                System.out.println("Before:" + arrayList);
                for (int i = 0; i < 100; i++) {
                    arrayList.add(i,true);
                }
                new ChangeValue().changeValues(1, arrayList);

            }

            public void changeValues(int x, List<Boolean> arrayList) {
                int d = x+1;
                x -= x;
                System.out.println("ff:" + arrayList.size());
                while (x <= arrayList.size()) {
                    if (arrayList.get(x) == true) {
                        arrayList.add(x, false);
                    }
                    x += d;
                    if (x == arrayList.size()) {
                        break;
                    }
                }
                System.out.print("After:" + arrayList);
            }
        public static void main(String[] args) {
                List arrayList = new ArrayList<Boolean>();
                for (int i = 0; i < 100; i++) {
                    arrayList.add(false);
                }
                System.out.println("Before:" + arrayList);
                for (int i = 0; i < 100; i++) {
                    arrayList.add(i,true);
                }
                new StateFlowerBird().changeValues(1, arrayList);

            }

            public void changeValues(int x, List<Boolean> arrayList) {
                int d = x+1;
                x -= x;
                System.out.println("ff:" + arrayList.size());
                while (x <= arrayList.size()) {
                    if (arrayList.get(x) == true) {
                        arrayList.add(x, false);
                    }
                    x += d;
                    if (x == arrayList.size()) {
                        break;
                    }
                }
                System.out.print("After:" + arrayList);
            }

    }