java - 打印列表中的值

java - Printing values from List

我有这段代码,当存在三个连续值(即 false、false、false、truetrue、true、true、 false) 但当我输入非连续值时(即 false, true, false, true OR true, false, true, false) 它错过了第一个值或最后一个值。

if 语句用于合并相同的值,就好像有两个或三个连续的值一样,代码会将输出显示为合并,例如,如果值为 false, false, false, true 然后输出将如下所示:

[ 0 12 false, 12 15 true]

如果值是 false, false, true, true 那么输出是这样的

[ 0 10 false, 10 15 true]

但是这里是问题,当我输入类似(即false、true、false、true)的值时,输出是

[ 5 10 true, 10 12 false, 12 15 true]

虽然它应该像 [ 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());
        }
    }
}

当前循环不处理所有值,它从 0 迭代到 s.length - 1,因此如果所有信号都不同且无法合并,最后一个信号将丢失。

最小的修复方法是将 s[0] 添加到 list,然后从 1 迭代到 s.length,从而确保处理所有信号。

接下来,为了打印对 List<signal> 的每个更改,最好实现一个单独的方法 addAndPrintSignal

此外,最好避免在方法 add1() 中对输入信号数组进行硬编码并将其作为可变参数传递 add1(signal ... s)

private static void addAndPrintSignal(List<signal> 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]