java - 打印列表中的值
java - Printing values from List
我有这段代码,当存在三个连续值(即 false、false、false、true 或 true、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]
我有这段代码,当存在三个连续值(即 false、false、false、true 或 true、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]