[英]java - Printing values from List
我有這段代碼,當存在三個連續值(即false、false、false、true或true、true、true、false )但當我輸入非連續值(即false、true、false、true或true, 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.