从另一个方法更改字段的值

时间:2014-05-27 01:18:09

标签: java class field assert

所以我有一些代码创建了一个自定义类ArrayUtil,然后检查ArrayUtil类中方法的结果是否等于某个字符串。我必须插入main()方法的代码将在[???]当前的位置。

class ArrayUtil{String opening="["; String closing="]"; String separator=", ";
  public final String format(Object[]array){
    String result=opening;
    if(array.length==0)return result+closing;
    for(int i=0;i<array.length-1;i++){
      result+=array[i]+separator;
    }
    return result+array[array.length-1]+closing;
  }
}
public class Exercise{
  public static void main(String [] arg){
    ArrayUtil u=(new ArrayUtil(){[???]});
    assert "[1; 2; 3]".equals(u.format(new Integer[]{1,2,3}));
    assert "[4; 5; 6]".equals(u.format(new Integer[]{4,5,6}));
    assert "[7; 8; 9]".equals(u.format(new Integer[]{7,8,9}));
  }
}

我已经确定了问题所在。字符串分隔符(在类ArrayUtil中)是“,”,而main()方法正在寻找“;”。

我坚持的是将分隔符字段的值更改为“;”。 我试图改变像这样的分隔符:

ArrayUtil u=(new ArrayUtil(){String separator = ";";});

这不正确。

所以我的问题是:如何让我的String分隔符从main方法中改变它的值?

3 个答案:

答案 0 :(得分:0)

尝试将String变量更改为静态,如此...

static String opening = "[";
static String closing = "]";
static String separator = ",";

然后调用main中的变量......

ArrayUtil.separator = ";";

然后看看是否能解决您的问题!

答案 1 :(得分:0)

要更改分隔符,您可以执行以下操作:

ArrayUtil u = new ArrayUtil(){
        {
            separator = "; ";
        }
    };

将分隔符设置在初始化块中。

一种更简单的方法可能是创建一个普通(非匿名)的ArrayUtil实例,然后像这样更改分隔符:

ArrayUtil u = new ArrayUtil();
u.seperator = "; ";

答案 2 :(得分:0)

我认为您无法更改ArrayUtil类,因为您已尝试更改分隔符。如何使用替换方法来替换所有&#34 ;;&#34;用&#34;,&#34;断言之前。

"[1; 2 ; 3]".replaceAll(";", ",").equals(u.format(new Integer[]{1,2,3})

这可能不是您正在寻找的答案,但除此之外我不明白为什么您无法更改分隔符,除非您不拥有ArrayUtil类,在这种情况下如上所述您唯一的选择是更改比较之前的输入是否已知两个分隔符总是不同的。如果您可以选择更改ArrayUtils代码,为什么不更改签名以接受separtor作为方法的另一个参数或构造函数参数,并且您可以像新的ArrayList一样调用它(&#34 ;;&#34; )[???]

class ArrayUtil{
  ArrayUtil(String separator){
      this.separator = separator;
  }
  String opening="["; String closing="]"; String separator=", ";
  public final String format(Object[]array,String separtorString){
      this.separator = separtorString;
      return format(array);
  }
  public final String format(Object[]array){
        String result=opening;
        if(array.length==0)return result+closing;
        for(int i=0;i<array.length-1;i++){
          result+=array[i]+separator;
        }
        return result+array[array.length-1]+closing;
      }}
}