setJavahackercoding(3.1)
I managed to code me up some of the exercises from chapter 4, and I’m all over classes. The final exercise was to create a Robot class that took a name, weight, bad habit(?), artificial intelligence level, and whether it could see. As an extension exercise, it could also have a “memory module” that allowed 5 mutations (changes) to either the bad habit, or the AI.
My Robot.java class is below:
public class Robot {
private String name;
private double weight;
private String badHabit;
private boolean hasVision;
private int aiq;
private int mutations;
private boolean decommissioned;
public Robot(String name, double weight, String badHabit, boolean
hasVision, int aiq){
this.name = name;
if (weight < 0){
this.weight = Math.abs(weight);
}
else {
this.weight = weight;
}
this.badHabit = badHabit;
this.hasVision = hasVision;
this.aiq = aiq;
if (this.aiq <= 0){
this.aiq = 0;
}
if (this.aiq >= 3){
this.aiq = 3;
}
mutations = 0;
decommissioned = false;
}
public void mutate(){
mutations++;
if (mutations >= 5){
decommissioned = true;
}
}
public void setBadHabit(String badHabit){
if (!decommissioned){
this.badHabit = badHabit;
mutate();
}
}
public void addModule(){
if (!decommissioned){
if (aiq < 3){
aiq++;
}
else {
aiq = 3;
}
mutate();
}
}
public String getName(){
return name;
}
public double getWeight(){
return weight;
}
public boolean getSight(){
return hasVision;
}
public String getAIQ(){
if (aiq 0){ return "Non Existant"; } if (aiq 1){
return "Low";
}
if (aiq == 2){
return "Medium";
}
else {
return "High";
}
}
public String getBadHabit(){
return badHabit;
}
public void displayDetails(){
System.out.println("The robot's name is " + name);
System.out.println("The robot's weight is " + weight);
System.out.println("The robot has a bad habit of " + badHabit);
System.out.println("The robot can see = " + hasVision);
System.out.println("The robot's AIQ is " + getAIQ());
System.out.println("The robot has undergone " + mutations + "
mutations.");
System.out.println();
}
}
It’s long. It’s also full of stuff I didn’t end up using in the test class, as I hate typing out System.out.println();
over and over to test stuff, so I included the outputs in a displayDetails() method. Probably should add those as tests at least once, just to check my syntax, but that would make my test even longer. This is my RobotTest.java class:
public class RobotTest {
public static void main(String[] args) {
Robot robby = new Robot("Robby",104,"Smoking",false,1);
Robot bender = new Robot("Bender",200,"Drinking",true,2);
Robot vacuum = new Robot("Vacuulux",20,"Sucking",false,-1);
Robot astro = new Robot("Toby",-80,"Playing too much",true,3);
robby.displayDetails();
robby.addModule();
robby.setBadHabit("Spitting");
robby.addModule();
robby.addModule();
robby.setBadHabit("eating before swimming");
robby.setBadHabit("dying");
robby.displayDetails();
bender.displayDetails();
vacuum.displayDetails();
vacuum.setBadHabit("breaking down");
vacuum.addModule();
vacuum.displayDetails();
astro.displayDetails();
astro.addModule();
astro.displayDetails();
}
}
The test helped me to pick up that my coding was wrong in my Robot. Originally I had omitted line 20, and had the test on line 21 as if (aiq < = 0){this.aiq = 0;} if (aiq >= 3){this.aiq = 3;} else {this.aiq=aiq;}
. I’m not sure why this doesn’t work – if AIQ is less than zero it still sets this.aiq to the retrieved value – but I presume the test cannot read aiq
unless it has been retrieved and put into this.aiq
. Its seems better to do it this way anyway, as it’s less typing and less ambiguous. But that’s something I can say I’ve learned.
As for my double
trouble this morning, I’ve been reading up on why one of my values had some extra decimals, and I believe it’s a particular problem when you try and store 0.1 in a double. I still have no idea how to get around it though and it seems like Java should be able to handle something like that, but who am I to judge, with my Tomatoes.java and my RobotTest.java.
So on to class tonight!
Update: I’m sitting in class. Looking over an example from the lecturer, I’ve realised that my original code didn’t work because I missed else if
. I added it, and the code I originally thought should work worked!