我正在尝试在java教科书中研究这个问题。 问题是要重写这个程序以消除副作用, 通过调用函数(或方法,有点相同)生成对象或程序变量状态的更改。
包边效应;
public class SideEffect {
**public static int x;**
public static int f(int n){
x = x * 2;
return x + n;
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
x = 5;
//int result = f(x) + f(x);
int result = 2 * f(x);
//System.out.println(result);
}
}
注释掉的行是当我实现整数变量并且它是打印输出时发生的。 如果我实现这些行并注释掉其他行, 结果是45。 如果实现另一个, 结果是30。 有没有办法理顺程序,所以没有副作用? 我以为我删除了全局变量行,因为它在书中说它会导致这种不好, 令人困惑的代码。 但我还能尝试什么呢?
答案 0 :(得分:0)
我知道这是一项任务,但像这样的事总是有些令人发狂。 "问题"是他们正在以一种永远不会被使用的方式使用全局变量。 "当我这样做时医生会疼。不要这样做"。
一般来说静态(类级别)变量很少是你真正想要的。另外main()用于实例化你的对象并让它们失去世界,而不是像C程序那样繁重。
创建类并按值传递。不要使用全局变量,除非你真的想拥有一个且只有一个实例。
这真的是我能提供的最好的东西,因为从你的问题中可以清楚地知道"正确的"结果是。
答案 1 :(得分:0)
好的,好多了:
包边效应;
public class SideEffect {
public static int f(int x, int n){
x = x * 2;
return x + n;
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int x = 5;
int result = f(x , 5) + f(x, 5);
System.out.println(result);
}
}
我在x中作为公共static int中的int brou所以我不必初始化变量。
答案 2 :(得分:-1)
这可能会奏效,但我不确定。我评论了全局变量,然后在f方法和main方法中声明了int x。结果是,我是否使用" int result"并不重要。电话,它仍然是10输出。但我可能错了:
<!doctype html>
<html>
<body>
-3, -1, -2, 0, 2, 1, 2, 4, 5, 3, 4, 2, 4, 5, 6, 2, 3, 1, 3, 4, 1, -1, -3, -1