哇。相当大的文字墙。因此:
分解
您的设置
目前,它生成一个人类对象数组并运行一个 for 循环来循环通过一组改变它们之间关系的动作,我将它们存储在一个二维整数数组中。
我希望程序能够清楚地打印发生的动作。
我认为最好的方法是在我的“动作”类中添加一个字符串描述(它存储了演员、反应器和关系变化量的变量)。
听起来你的Action
课到目前为止看起来像这样:
public class Action {
private String reactor;
private String actor;
private double hateMeasure;
/* Obligatory constructor method, getters, and setters go here */
}
你的麻烦
我希望它更具体一点(“人 A 向人 B 的头扔了一块石头!”)。
...尝试使用引用actor和reactor的描述字符串构造一个动作让我......“在定义之前无法引用字段。”
在这一点上,我不太确定您是如何设置参考字段的,以及您是如何遇到此错误的。
我知道您不是在寻找代码,但您必须理解在不向他们展示一些基本原理说明代码的情况下让某人进入“程序员模式”的困难。
也许创建一个方法,它接受actor和reactor的两个参数,然后在每个动作发生后调用该方法?
public void reportAction(String reactor, String actor) {
// do stuff
}
/* if you're confused by how "reactor" and "actor" have the same names as
the instance variables, look into the "this" keyword */
或者(如果您的设置与我从您的描述中推断的不同,请添加这些实例变量,然后)您可以简单地在您的Action
类中编写一个不带参数并简单地引用您的实例变量的新方法:
public void reportAction() {
System.out.println(actor + " with " + reactor);
}
现在我突然想到,您可能希望指定反应器和演员之间发生的事情,而不是简单地说明两个特定模拟人之间发生的事情。在这种情况下...
public void reportAction() {
System.out.print(actor);
// you're going to have to define the change in hateMeasure here
if( deltaHateMeasure > 0 ) {
System.out.print(" had a fight with " + reactor);
} else { /* print other stuff */ }
}
另一件有趣的事情是三元运算符,如果你想简洁地编写代码的话。
玩得开心!
编辑:
甚至更好!在你的类中添加一个String descriptor;
实例变量!
然后这一切都归结为...:
public void reportAction() {
System.out.println(actor + descriptor + reactor);
}