簡體   English   中英

java - 從列表中打印值

[英]java - Printing values from List

我有這段代碼,當存在三個連續值(即false、false、false、truetrue、true、true、false )但當我輸入非連續值(即false、true、false、truetrue, false, true, false ) 它錯過了第一個值或最后一個值。

if語句用於合並相同的值,就像有兩個或三個連續值一樣,代碼會將 output 顯示為合並,例如,如果值為false、false、false、true,則 output 將如下所示:

[0 12 錯誤,12 15 正確]

如果值為false、false、true、true,則 output 是這樣的

[0 10 錯誤,10 15 正確]

但是當我輸入諸如(即false, true, false, true )之類的值時,問題就出現了,那么 output 是

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

當前循環不處理所有值,它從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));

Output

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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM