作者共发了6篇帖子。 内容转换:不转换▼
 
点击 回复
653 5
【程序】多项式加法计算器
一派护法 十九级
1楼 发表于:2016-9-26 23:40
【测试代码】
    protected void calc(TextView tv) {
        Expression exp = new Expression();
        exp.add(4, 0);
        exp.add(8, 2);
        exp.add(6, 1);
        exp.add(9, 3);
        exp.add(-7, 5);
        exp.add(-8, 2);
        exp.add(-3, 5);
        String str = "a=" + exp.toString() + '\n';
       
        Expression exp2 = new Expression();
        exp2.add(-4, 0);
        exp2.add(-6, 1);
        exp2.add(-7, 2);
        exp2.add(1, 10);
        exp2.add(8, 4);
        exp2.add(-1, 6);
        exp2.add(10, 5);
        str += "b=" + exp2.toString() + '\n';
       
        exp.add(exp2);
        str += "a+b=" + exp.toString();

        tv.setText(str);
    }
一派护法 十九级
2楼 发表于:2016-9-26 23:40
package com.oct1158.javatest;

public class Expression extends LinkList {
    public int add(Item item) {
        int i = 0;
        LinkData p = link;
        for (i = 0; p != null; i++) {
            Item data = (Item)p.data;
            if (data.power == item.power) {
                data.coef += item.coef;
                if (data.coef == 0) {
                    delete(i);
                }
                return -1;
            } else if (data.power > item.power) {
                break;
            }
            p = p.next;
        }
        insert(i - 1, item);
        return i;
    }
    
    public int add(double coef, int power) {
        return add(new Item(coef, power));
    }
    
    public void add(Expression exp) {
        LinkData p = exp.link;
        while (p != null) {
            add((Item)p.data);
            p = p.next;
        }
    }
    
    @Override
    public String toString() {
        LinkData p = link;
        String str = "";
        while (p != null) {
            Item item = (Item)p.data;
            if (p != link) {
                if (item.coef > 0) {
                    str += '+';
                }
            }
            str += item.coef;
            if (item.power == 1) {
                str += 'x';
            } else if (item.power != 0) {
                str += "x^" + item.power;
            }
            p = p.next;
        }
        return str;
    }
}

一派护法 十九级
3楼 发表于:2016-9-26 23:40
package com.oct1158.javatest;

public class LinkList {
    LinkData link;
    
    /*public LinkData append(Object obj) {
        int i = getLength() - 1;
        return insert(i, obj);
    }*/
    
    public Object delete(int i) {
        Object obj;
        if (i == 0) {
            obj = link.data;
            link = link.next;
            // 若所有节点都被删除了, 则this.link = null
        } else {
            LinkData p = get(i - 1);
            if (p == null || p.next == null) {
                return null;
            }
            obj = p.next.data;
            p.next = p.next.next;
        }
        return obj;
    }
    
    public LinkData get(int i) {
        LinkData data = link;
        for (; i > 0; i--) {
            data = data.next;
            if (data == null) {
                break;
            }
        }
        return data;
    }
    
    public int getLength() {
        int i;
        LinkData data = link;
        for (i = 0; data != null; i++) {
            data = data.next;
        }
        return i;
    }
    
    public LinkData getRear() {
        LinkData data = link;
        if (data == null) {
            return null;
        }
        while (data.next != null) {
            data = data.next;
        }
        return data;
    }
    
    // 在i的后面插入
    public LinkData insert(int i, Object obj) {
        LinkData q = new LinkData(obj);
        if (i == -1) {
            q.next = link; // -1.next = link
            link = q;
        } else {
            LinkData p = get(i);
            if (p == null) {
                return null;
            }
            q.next = p.next;
            p.next = q;
        }
        return q;
    }
}

一派护法 十九级
4楼 发表于:2016-9-26 23:41
package com.oct1158.javatest;

public class LinkData {
    public Object data;
    public LinkData next = null;
    
    public LinkData(Object data) {
        this.data = data;
    }
}

一派护法 十九级
5楼 发表于:2016-9-26 23:41
package com.oct1158.javatest;

public class Item {
    public double coef;
    public int power;
    
    public Item(double coef, int power) {
        this.coef = coef;
        this.power = power;
    }
}

一派护法 十九级
6楼 发表于:2016-9-26 23:42
【运行结果】

回复帖子

内容:
用户名: 您目前是匿名发表
验证码:
(快捷键:Ctrl+Enter)
 

本帖信息

点击数:653 回复数:5
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2016-9-26 23:42
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。