Difference between revisions of "User talk:Navajo"

From Robowiki
Jump to navigation Jump to search
(Answer)
(copy constructor and Clonable interface)
Line 37: Line 37:
  
 
::: Hey Navajo, that's correct. If you code something like "Scan a = new Scan(); Scan b = a; a.attribute=3" then b.attribute is 3 too. a & b point to the same thing. To change this, you need to code something like: "Scan a = new Scan(); Scan b = new Scan(); a.attribute=3; b.attribute=4;". In this case a.attribute is not equal to b.attribute. --[[User:Positive|Positive]] 23:28, 23 July 2009 (UTC)
 
::: Hey Navajo, that's correct. If you code something like "Scan a = new Scan(); Scan b = a; a.attribute=3" then b.attribute is 3 too. a & b point to the same thing. To change this, you need to code something like: "Scan a = new Scan(); Scan b = new Scan(); a.attribute=3; b.attribute=4;". In this case a.attribute is not equal to b.attribute. --[[User:Positive|Positive]] 23:28, 23 July 2009 (UTC)
 +
 +
::: As [[Positive]] said, both reference the same objects and both suffer the same changes in their state. The way I like to overcome this, is to create a copy constructor as C++ would. Although is easy to come up for yourself and there is no reason to think this is the best way from any point of view, except that I like it :), here is some code to show you my way to do it.
 +
<code>
 +
class A {
 +
/* some attributes */
 +
  public A(A a) {
 +
  /* copy state from a, using new when appropriate */
 +
  }
 +
}
 +
class B extends A {
 +
/* some attributes */
 +
  public B(B b) {
 +
    super(b); /* call copy constructor for superclass A */
 +
    /* copy state for class B specific attributes */
 +
  }
 +
}
 +
</code>
 +
::: And the conventional way to do this in Java is to implement the [http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Cloneable.html Clonable] interface '''and''' override the [http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#clone() Object.clone] method. Hope it helps. --[[User:Zyx|zyx]] 00:00, 24 July 2009 (UTC)

Revision as of 01:00, 24 July 2009

Welcome!

Hello, Navajo, and welcome to RoboWiki! This place contain a wealth information about Robocode, from basic to more advanced. I hope you enjoy creating robots and being a robocoder!

If you are posting a comment on this wiki, please sign your messages using four tildes (--~~~~); this will automatically insert your username and the date stamp. If you are not familiar with MediaWiki, these links might help you out:

If you need help, check out the frequently asked questions or ask it on this page. Again, welcome!

—— Voidious 21:28, 20 July 2009 (UTC)


Hey, welcome to the wiki. =) Feel free to post if/when you have questions. Best of luck with yours bots! --Voidious 21:28, 20 July 2009 (UTC)

Thank you for the welcome. I believe my best question by now would be where is the right place to ask each question, but I believe I will soon get used to this... --Navajo 17:31, 21 July 2009 (UTC)

If there's a page for the topic of your question, its Talk page is a good place. This page (your Talk page) would also be fine. Most of us watch the Recent changes page, so you really can ask anywhere and it will be noticed.
As for English, it's no problem. There are quite a lot of non-native English speakers on this wiki. It actually quite impresses me. Sometimes I forget. =) --Voidious 18:23, 21 July 2009 (UTC)

If I remember correctly there was a topic in the old wiki about fast trig, something like a class that had its own sine and cosine methods and was suppose to be faster than the standart functions from java. I have been unsuccessfully looking for this topic for a few days now, so I was wondering if someone here would know where it is --Navajo 23:04, 21 July 2009 (UTC)

I'm not sure about the one on the old wiki, FastMath and FastMath/SquareRoot are all I can find. But at least a few people use this: User:Rednaxela/FastTrig. --Voidious 23:15, 21 July 2009 (UTC)
Thank you, this was exactly what I was looking for! How did you find it so fast?--Navajo 23:25, 21 July 2009 (UTC)
Well, I remembered Rednaxela had written that, and I thought it was called "FastTrig", so I searched for "FastTrig" and that was the first result... =) --Voidious 23:29, 21 July 2009 (UTC)
I have some time posted on talk page of FastTrig page. You might want to check it. » Nat | Talk » 10:32, 22 July 2009 (UTC)

Just a silly java question: if I have an instance of an object, like a wave and it contains an instance of another object (as one of its fields/variables) like a scan, then, when I set this scan to be one of those I have in my log of scans, does it create a new instance of the object or just store a reference to the original scan? --Navajo 21:41, 23 July 2009 (UTC)

A reference, every object in Java is a reference to an object in the heap, that is why you can't call it's constructor in the definition and have to call new when you want to create it, so the actual object is created in the heap. --zyx 22:36, 23 July 2009 (UTC)
So every instance of an object that I create is stored in the heap. Does this means that, for example, every instance of my scan object is stored in the heap, and a log of scans contains only references to these objects, and an instance of the wave object contains only a reference to that same instance of the scan? So in this sense, if I change some atribute of this scan, both the one avaible through the log and the one avaible through the wave will suffer the same change? I mean, if I change the position of the robot stored in the scan, if I try to get the position from either the wave or the log I will get the same value? --Navajo 23:15, 23 July 2009 (UTC)
Hey Navajo, that's correct. If you code something like "Scan a = new Scan(); Scan b = a; a.attribute=3" then b.attribute is 3 too. a & b point to the same thing. To change this, you need to code something like: "Scan a = new Scan(); Scan b = new Scan(); a.attribute=3; b.attribute=4;". In this case a.attribute is not equal to b.attribute. --Positive 23:28, 23 July 2009 (UTC)
As Positive said, both reference the same objects and both suffer the same changes in their state. The way I like to overcome this, is to create a copy constructor as C++ would. Although is easy to come up for yourself and there is no reason to think this is the best way from any point of view, except that I like it :), here is some code to show you my way to do it.

class A {
/* some attributes */
  public A(A a) {
  /* copy state from a, using new when appropriate */
  }
}
class B extends A {
/* some attributes */
 public B(B b) {
   super(b); /* call copy constructor for superclass A */
   /* copy state for class B specific attributes */
 }
}

And the conventional way to do this in Java is to implement the Clonable interface and override the Object.clone method. Hope it helps. --zyx 00:00, 24 July 2009 (UTC)