RobocupRescue & Java(2)

来源:互联网 发布:电脑软件 著作权 专利 编辑:程序博客网 时间:2024/06/05 20:17

    • Background
    • 大数组
    • 上转型对象abstract类与多态
    • for each 语句中需要注意的一个tip
      • 一个没有名字的tip
    • Rescue Simulation 配置 agent 的一些笔记

Background

懒癌晚期,苟延残喘,无可救药,拖至周五才作此文,仅限于本人矫情及组员回顾近期所学 :)

———————我是分割线——————————–

大数组

在需要使用海量数据时,java通常使用大数组进行存储
整型为 BigInteger 浮点型为 BigDecimal
常用运算和需要注意的一些tips:

BigInteger a = b.add(c);
BigInteger b = c.subtract(d):
BigInteger d = c.multiply(a);
BigDecimal e = f.divide(g);
因为不能使用 = 号,所以有了 compareto 方法
a.compareTo(b) 当a == b 时返回0,当a > b 返回一个随机的大于0的数,
当a < b 返回一个随机的小于0的数。
注意任何大数组运算中的所有参数必须是大数组,否则需要用 valueOf(number)的方法对常数进行转化。

上转型对象&abstract类与多态

concept1 : 假设在一个继承关系中,A类是超类,B类是子类。现在用B创建一个对象b,并把b的引用放到超类A的对象a中,例如:
A a;
a = new B();
或 A a;
B b = new B();
a = b; 此时我们将b上转为a,称对象a是对象b的上转型对象。
上转型对象会缺失上转前的一些属性,例如:
不能使用子类新增的成员变量和新增的方法。
但是,可以访问子类继承的或隐藏的成员变量,也可以调用继承或重写的方法

```JAVAclass Person{ int a=10; void plus(){  a++; } void miner() {  a--; } int getA() {  return a; }}class Man extends Person{ int a=0; void plus() {  a++; } int getA() {  return a; }}public class Demo { public static void main(String[] args) {  // TODO Auto-generated method stub  Person person=new Man();  System.out.println(person.a); //10  只能操作超类的成员变量  System.out.println(person.getA()); //0  若有则必须调用子类重写的方法  person.miner(); //只能调用超类的方法  System.out.println(person.a); //9  System.out.println(person.getA()); //0  person.plus(); //调用了重写的方法,在这方法中对子类的成员 0+1  System.out.println(person.a); //9  System.out.println(person.getA()); //1 }}```

concept2:
首先有两句很没有意义的定义:用关键字abstract修饰的类和方法称之为抽象类和抽象方法。
什么是抽象? abstract一词在朗文词中的解释是:existing only as an idea or quality rather than specific examples or real events. 在计算机语言中,抽象类只关心操作(即方法的名字、类型以及参数)而不关心操作具体实现的细节,即不关心方法体。
例:

abstract class A{abstract int sum(int x, int y); //抽象类的抽象方法不进行实现int sub(int x, int y){ //抽象类也可以有非抽象方法    return x-y;}}class B extends A{    int sum(int x, int y){        return x+y; //子类必须重写抽象父类的抽象方法    }}

attention
(1)只有抽象类才能定义抽象方法,但抽象类也可以有非抽象方法。
(2)抽象类不能用new运算符创建对象,不允许用final 和abstract同时修饰一个方法。
(3)抽象类的非抽象子类必须重写父类的抽象方法,抽象类的抽象子类可以重写父类的抽象方法也可以继承父类的抽象方法。
抽象类的好处
可以通过在一个抽象类中声明若干个抽象方法表明这些方法的重要性,让程序设计者忽略具体的细节,拿上来直接用,避免设计者把大把的时间和精力花费在具体的算法上,具体的内容放在它的非抽象子类去完成。

通过多态将抽象类和上转型技术结合
concept:
将abstract类声明对象作为其子类的上转型对象,那么这个上转型对象就可以调用子类重写的方法
如:
Animal.java

public abstract class Animal {public abstract void cry();public abstract String getName();}

Simulator.java

public class Simulator  {public void playSound(Animal animal){System.out.print("现在播放" + animal.getName() + "的声音:");animal.cry();}}

Dog.java

public class Dog extends Animal {public void cry(){    System.out.println("汪里个汪"); //非抽象子类必须重写抽象方法}public String getName(){ //具体实现时不用增加abstract关键字    return "汪星人";}}

Cat.java

public class Cat extends Animal {    public void cry(){        System.out.println("喵里个喵"); //非抽象子类必须重写抽象方法    }    public String getName(){ //具体实现时不用增加abstract关键字        return "喵星人";    }}

Example.java

public class Example {    public static void main(String []args)    {        Simulator simulator = new Simulator();        simulator.playSound(new Dog());        simulator.playSound(new Cat());    }}

在本例中animal是Animal任何一个子类的上转型

for each 语句中需要注意的一个tip

for each语句不会改变数组元素的值
例如:

      for(int element : array)      {          element++; //don't work!      }

一个没有名字的tip

如果在eclipse中使用foreach 语句编译不通过以及其他jar 版本问题的异常,均可在window—-> preference —-> java compiler 以及 path 中修改版本即可。

Rescue Simulation 配置 agent 的一些笔记