父类与子类this相关问题
1.SinglyLinkedList:
- package No3_PolySinglyList;
- /*实现 带头结点的单链表SinglyLinkedList类*/
- public class SinglyLinkedList<T> extends Object {
- private Node<T> head; // 头结点
- public SinglyLinkedList() {
- this.head = new Node<T>();
- }
- public SinglyLinkedList(T[] element) {// 由指定数组中的多个对象构造单链表
- this();
- Node<T> rear = this.head;
- for (int i = 0; i < element.length; i++) {
- rear.next = new Node<T>(element[i], null);
- rear = rear.next;
- }
- }
- public SinglyLinkedList(SinglyLinkedList<T> list) {// 以单链表list构造新的单链表,复制单链表
- this();
- Node<T> rearOld = list.head; // rearOld为已有链表的结点
- Node<T> rearNew = this.head; // rearNew为新链表的结点
- while (rearOld.next != null) {
- rearNew.next = new Node<T>(rearOld.next.data, null);
- rearNew = rearNew.next;
- rearOld = rearOld.next;
- }
- }
- public int size() {//计算该单链表的长度(元素个数)
- int size=0;
- Node<T> front=this.head;
- while(front.next !=null) {
- size++;
- }
- return size;
- }
- public Node<T> insert(int i,T x){ //插入对象x作为第i个元素
- if(x==null)
- throw new NullPointerException("x==null");
- //下标容错
- if(i<0)
- i=0;
- else if(i>this.size())
- i=this.size()-1;
- Node<T> front=this.head;
- for(int j=0;front.next!=null&&j<i;j++) {
- front=front.next;
- }
- front.next=new Node<T>(x,front.next);
- return front.next;
- }
- public Node<T> insert(T x){//在单链表最后插入对象x
- return insert(Integer.MAX_VALUE,x);
- }
- public String toString() {
- Node<T> rear = this.head.next; // rear1为前面链表的结点
- String str = "(";
- while (rear != null) {
- str += rear.data.toString();
- if (rear.next != null)
- str += ",";
- rear = rear.next;// 注意!!该语句不能放在if判断语句内
- }
- return str + ")";
- }
- }
2.PolySinglyList:
- package No3_PolySinglyList;
- /**
- * 带头结点的一元多项式链表
- *
- * @author Navis
- *
- * @param <T>
- */
- public class PolySinglyList<T> extends SinglyLinkedList<T> {
- protected Node<T> head;
- public PolySinglyList() {
- this.head = new Node<T>();
- }
- public PolySinglyList(T[] terms) {
- this();
- Node<T> rear = this.head;
- for (int i = 0; i < terms.length; i++) {
- rear.next = new Node<T>(terms[i], null);
- rear = rear.next;
- }
- }
- public PolySinglyList(PolySinglyList<T> list) {
- this();
- Node<T> rearOld = list.head.next; // rearOld为参数链表的结点
- Node<T> rearNew = this.head; // rearNew为新链表的结点
- while (rearOld != null) {
- rearNew.next = new Node<T>(rearOld.data, null);
- rearNew = rearNew.next;
- rearOld = rearOld.next;
- }
- }
- public PolySinglyList<T> union(PolySinglyList<T> list) { // 两个一元多项式相加
- Node<T> rear1; // rear1为原链表的结点
- Node<T> rear2; // rear2为参数链表的结点
- Node<T> rear1_front; // rear1的前继结点
- for (rear2 = list.head.next; rear2 != null; rear2 = rear2.next) {
- System.out.println("rear2=" + rear2);
- boolean flag = false;
- for (rear1_front = this.head, rear1 = rear1_front.next; rear1 != null; rear1_front = rear1, rear1 = rear1.next) {
- System.out.println("rear1=" + rear1);
- flag = ((TermX) rear1.data).add((TermX) rear2.data);
- if (flag)
- break;
- }
- if (rear1 == null) {// 若this链表中没有list中该元素相同指数的结点,则复制该节点,插在this链表最后(链表没有排序)
- // 插入rear2指向元素,rear1指向该结点
- rear1 = this.insert(rear2.data);
- System.out.println("rear1 =this.insert(rear2.data)=" + rear1);
- }
- if (((TermX) rear1.data).coef == 0) {// 若该元素系数为0,则删去
- rear1_front.next = rear1.next;
- }
- System.out.println(this);
- }
- return this;
- }
- public String toString() {
- Node<T> rear = this.head.next;
- String str = "";
- while (rear != null) {
- str += rear.data.toString();
- rear = rear.next;
- }
- return str;
- }
- }
3.No3://Test
- package No3_PolySinglyList;
- /*一元多项式相加*/
- public class No3 {
- public static void main(String[] args) {
- TermX[] termA = { new TermX(-7, 9), new TermX(2, 7), new TermX(-9, 4), new TermX(1, 2), new TermX(-1, 1),
- new TermX(2, 0) };
- PolySinglyList<TermX> polyListA = new PolySinglyList<TermX>(termA);
- PolySinglyList<TermX> polyListA2 = new PolySinglyList<>(polyListA);
- System.out.println("polyListA2=" + polyListA2);
- TermX[] termB = { new TermX(-1, 0), new TermX(1, 1), new TermX(-1, 2), new TermX(10, 4), new TermX(-3, 8),
- new TermX(5, 10),new TermX(9, 11) };
- PolySinglyList<TermX> polyListB = new PolySinglyList<>(termB);
- System.out.println("polyListB=" + polyListB);
- PolySinglyList<TermX> polyListC = polyListA.union(polyListB);
- System.out.println("两式相加得:\n polyListC=" + polyListC);
- }
- }
输出结果:
(图一)
(图二)
问题:
图一运行结果正常,问题出在图二的-3x^8项。
ListA中没有ListB的该元素,所以调用PolySinglyList类的父类SinglyLinkedList的方法
Node<T> insert(T x)。语句返回结果正常:-3x^8,可是this(指PolySinglyList类的该对象)没有变,仍是-7x^9+2x^7+x^4+1。
待解决
父类与子类this相关问题的更多相关文章
- 父类和子类以及super关键字
super和this关键字的特点类似:super代表的是父类对象的引用. 当子父类的成员出现同名时,可以通过super来进行区分. 子类的构造方法中,通过super关键字调用父类的构造方法. publ ...
- Java特性之多态父类与子类之间的调用
问题描述: Java三大特性,封装.继承.多态,一直没搞懂其中多态是什么,最近研究了一下,关于父类和子类之间的调用.下面是一个测试类,源代码如下: package com.test; public c ...
- java中父类与子类, 不同的两个类中的因为构造函数由于递归调用导致栈溢出问题
/* 对于类中对成员变量的初始化和代码块中的代码全部都挪到了构造函数中, 并且是按照java源文件的初始化顺序依次对成员变量进行初始化的,而原构造函数中的代码则移到了构造函数的最后执行 */ impo ...
- java父类转子类的一个方法
一般子类可以转父类.但父类转子类就会报cast error. 使用jsonobject 思想:先把父类转jsonstring 再把jsonstring转子类.剩余的子类值可以设定进去. import ...
- P188 实战练习(父类和子类)
1.创建一个父类,在父类中创建两个方法,在子类中覆盖第二个方法,为子类创建一个对象,将它向上转型到基类并调用这个方法. 创建Computer父类: package org.hanqi.practise ...
- 20141214--C#父类,子类
首要: 子类 包含父类的所有的属性方法 所有子类都可以直接转化成父类类型 当父类类型变量里面存的是某个子类的对象的时候,才能转化成那个子类类型. 父类与子类的装换: Ren r = new Ren() ...
- 多态&&父类调用子类特有的方法
/* 多态 1.没有继承就没有多态 2.代码的体现:父类类型的指针指向子类对象 3.好处:如果函数\方法参数使用的是父类对象,可以传入父类.子类对象 4.局限性: 1>父类类型的变量,不能直接调 ...
- C#基础知识—父类和子类的关系
基础知识一: using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms ...
- php 父类调用子类方法和成员
在C和C++里,父类都不允许调用子类的方法,但在php里可以.下面是一个调用的例子: <?php abstract class Animal { protected $name; public ...
随机推荐
- 【转】HTTP学习---图解HTTP[三次握手&&ISO模型]
[转]https://www.toutiao.com/i6592556686068679182/ 首先了解一次完整的HTTP请求到响应的过程需要的步骤: 1. 域名解析 2. 发起TCP的3次握手 3 ...
- 恶意代码分析_01_YARA规则_CLAMAV病毒库
写在前面的话: 上一篇文章里,我们已经初步了解了Malware的一些知识,并且利用Clamscan创建了自己的md5类型的病毒库, 那在这篇文章中,我将带领大家一起,来进一步了解病毒库的相关知识,以及 ...
- c++向量
https://blog.csdn.net/suxiao_shaoer/article/details/52180087 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个 ...
- 【adb命令】在cmd窗口中使用adb install命令安装 中文名字apk报错的解决办法
1.在cmd窗口中使用adb install命令安装中文名字apk报错,安装英文名字apk就正常,详细报错如下图: 2.查看adb版本号:adb version 3.怀疑是adb版本的原因,尝试换个最 ...
- 服务器上u盘装机centos7.2
说明: 截止目前CentOS 7.x最新版本为CentOS 7.2.1511,下面介绍CentOS 7.2.1511的具体安装配置过程 服务器相关设置如下: 操作系统:CentOS 7.2.1511 ...
- Actor模式初步入门
Actor模型概念 Actor模型为并行而生,简单说是未解决高并发的一种编程思路.在Actor模型中,主角是Actor,类似一种worker,Actor彼此之间直接发送消息,不需要经过什么中介,消息是 ...
- Opatching PSU in Oracle Database 11g Release 2 RAC on RHEL6
Opatching PSU in Oracle Database 11g Release 2(11.2.0.4) RAC on RHEL6 1) 升级opatch工具 1.1) For GI home ...
- Python2.7-heapq
heapq 模块,实现了堆序列算法,也叫优先序列算法.heap(堆)是每个父节点都小于等于子节点的树,同时所有节点k都满足 heap[k] <= heap[2*k+1] 和 heap[k] &l ...
- 使用PHPMail发送邮箱(163邮箱为例)
1.下载phpmail压缩包,并解压. 2.创建index.html文件.并写入代码. <form action="" method="post"> ...
- centos发送邮件
这里使用mailx发送. #yum -y install mailx 安装成功后,进入家目录编写配置文件.配置发送方的邮箱.密码.发送的服务器 #vi ~/.mailrc set from=hello ...