【问题标题】:Printing a set of conditions between a specified number of elements在指定数量的元素之间打印一组条件
【发布时间】:2018-05-02 20:03:37
【问题描述】:

作为生成文本输出文件的程序的一部分,我需要插入一个预定义的数字n(对应于所需元素的数量)并在它们之间自动创建条件。

例如对于 n=3,生成元素 s1、s2 和 s3。我想要实现的是自动生成以下条件并将它们打印在文本文件中:

s1<s2  & s1<s3
s2<=s1 & s2<s3
s3<=s1 & s3<=s2

上述条件涵盖了元素之间所有可能的组合。到目前为止,我拥有的是一个 ArrayList,它包含与预定义数字 n 一样多的元素以及以下代码以产生所需的结果:

int counter = 0;
ArrayList<String> state = new ArrayList<String>();
for (int i=0; i<=n; i++) {
    state.add(i,"s"+1));
}

for (int j=1; j<=n; j++) {

    for (int i=0; i<(n-1); i++) {
        if (i==(n-2)) {
           fw.write(state.get(i)+"<"+state.get(counter));
        }
        else {
           fw.write(state.get(i)+"<"+state.get(counter)+" & ");
        }
    }
    counter++;
}

我知道在这种情况下使用counter 是不正确的,但我想不出正确表示不同条件的方法。

更新:

使用以下代码进行测试,我设法接近了预期的结果:

ArrayList<String> collectStates = new ArrayList<String>();
String activeState,writtenState;
for (int i=0; i<n; i++) {
        for (int j=0; j<state.size(); j++) {
            if (state.get(i) != state.get(j)) {
                activeState=state.get(i)+"<"+state.get(j);
                writtenState=state.get(j)+"<"+state.get(i);

                if (collectStates.contains(activeState)) {
                    System.out.print(state.get(i)+"<="+state.get(j));
                }
                else {
                    System.out.print(activeState);
                }
                if (j!=state.size()-1) {
                    System.out.print(" & ");
                }
                collectStates.add(writtenState);
            }
        }
        System.out.print("\n");
    }

我收到的输出是:

s1<s2 & s1<s3
s2<=s1 & s2<s3
s3<=s1 & s3<=s2 & 

唯一的问题是最后一行末尾多余的&amp;,我还不知道如何解决。

【问题讨论】:

    标签: java arraylist conditional-statements filewriter


    【解决方案1】:

    我找到了问题的答案!在描述的更新部分中,我执行了以下添加以删除额外的 &amp; 符号:

    旧版本:

    if (j!=state.size()-1) {
        System.out.print(" & ");
    }
    

    更新版本:

    if ((j!=state.size()-1) && ((j!=state.size()-2) || (i!=state.size()-1))) {
        fw.write(" & ");
    }
    

    问题总是出现在输出条件的最后一行,因此是最新的修复。现在的输出与描述中描述的完全一样。

    更详细地说,程序所做的是删除相同的值:

    s1?s1 & s1?s2 & s1?s3
    s2?s1 & s2?s2 & s2?s3
    s3?s1 & s3?s2 & s3?s3
    

    所以通过删除:

    s1?s1 &amp; 我们保留s1?s2 &amp; s1?s3

    s2?s2 &amp; 我们保留s2?s1 &amp; s2?s3

    s3?s3 我们保留s3?s1 &amp; s3?s2 &amp;

    因此,需要添加新条件才能删除最后一行中多余的&amp;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-14
      • 1970-01-01
      • 2015-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-23
      • 1970-01-01
      相关资源
      最近更新 更多