有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

数组java打印列表中的值

我有这个代码,当有三个连续值(即假、假、假、真真、真、真、假)时,它工作正常,但当我输入非连续值(即假、真、假、真真、假、真)时,它会丢失第一个值或最后一个值

if语句用于合并相同的值,就像有两个或三个连续的值一样,代码将输出显示为merge,例如,如果值为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假,5 10真,10 12假,12 15真]一样,因为它忽略了第一个值,而真,假,真,假值的情况也一样,它忽略了第一个值

下面是我的代码

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());
        }
    }
}

共 (1) 个答案

  1. # 1 楼答案

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

    最简单的解决方法是将s[0]添加到list,然后从1迭代到s.length,从而确保所有信号都得到处理

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

    此外,最好避免在方法add1()内硬编码输入信号数组,并将其作为vararg 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]