java-打印列表中的值

h7wcgrx3  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(451)

我有这个代码,当有三个连续的值(即false、false、false、true或true、true、true、false)时,它可以正常工作,但当我放置非连续的值(即false、true、false、true或true、false、true、false)时,它会丢失第一个值或最后一个值。
这个 if 语句用于合并相同的值,就像有两个或三个连续的值一样,代码将输出显示为merge,例如,如果值为false、false、false、true,则输出如下所示:
[0 12假,12 15真]
如果值为false,false,true,true,那么输出如下
[0 10假,10 15真]
但问题是,当我输入值(如false,true,false,true)时,输出是
[5 10对,10 12错,12 15对]
虽然它应该像[0 5 false,5 10 true,10 12 false,12 15 true]一样,因为它忽略了第一个值,而true,false,true,false值的情况也是如此,但是它忽略了第一个值。
下面是我的代码

package com.company;

import java.util.*;

public class Main {

static List<signal> list = new ArrayList<signal>();
static List<signal> list1 = new ArrayList<signal>();
static List<signal> res = new ArrayList<signal>();

static void add1() {
    signal [] s = new signal[4];
    s [0] = new signal(0,5,false);
    s [1] = new signal(5,10,true);
    s [2] = new signal(10,12,false);
    s [3] = new signal(12,15,true);

    for (int i = 0 ; i<s.length-1; i++)
    {
        if(s[i].v ==s[i+1].v && s[i].b == s[i+1].a)
        {
            s[i].b = s[i+1].b;
            s[i+1].a = s[i].a;

            list.add(s[i+1]);
            list.remove(s[i]);
            System.out.println(list.toString());
        }
        else
        {
            list.add(s[i+1]);
            System.out.println(list.toString());
        }
    }
}
daolsyd0

daolsyd01#

当前循环不处理所有值,它从 0s.length - 1 ,因此,如果所有信号都不同且无法合并,则最后一个信号将丢失。
最简单的解决方法是将s[0]添加到 list 然后从1迭代到 s.length ,从而确保处理所有信号。
接下来,为了将每个更改打印到 List<signal> 最好实现一个单独的方法 addAndPrintSignal .
另外,最好避免在方法内部硬编码输入信号数组 add1() 把它当作瓦拉格传递 add1(signal ... s) ```
private static void addAndPrintSignal(List signalList, signal s) {
signalList.add(s);
System.out.println(signalList.toString());
}

static void add1(signal ... s) {
System.out.println("add1(): " + Arrays.toString(s));
if (null == s || 0 == s.length) {
return;
}
addAndPrintSignal(list, s[0]);

for (int i = 1 ; i < s.length; i++) {
    if (s[i - 1].v == s[i].v && s[i - 1].b == s[i].a) {
        s[i - 1].b = s[i].b;
        s[i].a = s[i - 1].a;

        list.remove(s[i - 1]);
    }
    addAndPrintSignal(list, s[i]);
}

}

// tests
add1((signal[]) null);
add1();
add1(new signal(0,5,false), new signal(5,10,false), new signal(10,12,true), new signal(12,15,true));
add1(new signal(0,5,false), new signal(5,10,true), new signal(10,12,false), new signal(12,15,true));

输出

add1(): null
add1(): []
add1(): [0 5 false, 5 10 false, 10 12 true, 12 15 true]
[0 5 false]
[0 10 false]
[0 10 false, 10 12 true]
[0 10 false, 10 15 true]
add1(): [0 5 false, 5 10 true, 10 12 false, 12 15 true]
[0 10 false, 10 15 true, 0 5 false]
[0 10 false, 10 15 true, 0 5 false, 5 10 true]
[0 10 false, 10 15 true, 0 5 false, 5 10 true, 10 12 false]
[0 10 false, 10 15 true, 0 5 false, 5 10 true, 10 12 false, 12 15 true]

相关问题