Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于打印多项式_Java - Fatal编程技术网

Java 关于打印多项式

Java 关于打印多项式,java,Java,这是存储和计算输入数多项式的类的一部分 这里是方法 public class Polynomial{ int coef,power; public Polynomial(int maxPower){ } public void setTerm(int coefficient, int power) { this.coef = coefficient; this.power = power; } 以及主方法中的输入参数 public static void main(Stri

这是存储和计算输入数多项式的类的一部分 这里是方法

public class Polynomial{
int coef,power;

public Polynomial(int maxPower){
}

public void setTerm(int coefficient, int power) {
    this.coef = coefficient;
    this.power = power;
}
以及主方法中的输入参数

public static void main(String[] args){
    Polynomial q = new Polynomial(2);
    q.setTerm(2, 0);
    q.setTerm(0, 1);
    q.setTerm(3, 2);
    System.out.println(q);
}
有一种toString方法可以打印出多项式,如下所示

public String toString(){
    return 
}

我一直遇到这样的问题,setTerm方法只读取最后的输入参数,即q.setTerm(3,2),我认为前两个参数已被替换。我能做什么?

您只存储了一个coef和一个电源。 最简单的方法是将系数数组按幂进行索引

public class Polynomial {

    final int[] coefficients;

    public Polynomial(int maxPower) {
        coefficients = new int[maxPower + 1]; // All zero.
    }

    public void setTerm(int coefficient, int power) {
        coefficients[power] = coefficient;
    }

    @Override
    public String toString() {
        StringBuilder sb = newStringBuilder();
        for (int power = 0; power < coefficients.length; ++power) {
            if (coefficients[power] != 0) {
                if (coefficients[power] > 0 && sb.length() > 0) {
                    sb.append('+');
                }
                sb.append(coefficients[power]);
                if (power > 0) {
                    sb.append('x');
                    if (power > 1) {
                        sb.append('^').append(power);
                    }
                }
            }
        }
        return sb.toString();
    }
}
公共类多项式{
最终int[]系数;
公共多项式(int-maxPower){
系数=新整数[maxPower+1];//全部为零。
}
公共空间设定值(整数系数,整数幂){
系数[功率]=系数;
}
@凌驾
公共字符串toString(){
StringBuilder sb=newStringBuilder();
对于(整数幂=0;幂<系数.length;++幂){
如果(系数[功率]!=0){
if(系数[幂]>0&&sb.length()>0){
某人附加(“+”);
}
某人附加(系数[幂]);
如果(功率>0){
某人附加('x');
如果(功率>1){
某人追加(权力);
}
}
}
}
使某人返回字符串();
}
}

因此,在您的示例中,我们必须记住前面看到的术语

我将通过一张地图来做这件事,如下所示

import java.util.HashMap;
import java.util.Map;

/**
 * Created by arunavs on 9/28/16.
 */
public class Polynomial {

    // Key is power, value is coeff.
    private Map<Integer, Integer> powerToCoeffMap = new HashMap<>();

    // Maximal power allowed for polynomial.
    private int maxPower;


    public Polynomial(int maxPower){
        this.maxPower = maxPower;
    }

    public void setTerm(int coefficient, int power) {
        if (power > maxPower) {
           // throw some exception here. 
        }
        powerToCoeffMap.put(power, coefficient);
    }

    // terms may be rearranged in output. 
    public String toString() {
        StringBuilder builder = new StringBuilder();
        powerToCoeffMap.forEach((power, coeff) -> {builder.append(coeff + "x^" + power+ " ");});
        return builder.toString();
     }

        public static void main(String args[]) {
            Polynomial q = new Polynomial(2);
            q.setTerm(2, 0);
            q.setTerm(0, 1);
            q.setTerm(3, 2);
        System.out.println(q);
    }
}
import java.util.HashMap;
导入java.util.Map;
/**
*由arunavs于2016年9月28日创建。
*/
公共类多项式{
//关键是力量,价值是系数。
私有映射powerToCoeffMap=newhashmap();
//多项式允许的最大幂。
私有int-maxPower;
公共多项式(int-maxPower){
this.maxPower=maxPower;
}
公共空间设定值(整数系数,整数幂){
如果(功率>最大功率){
//在这里抛出一些异常。
}
powerToCoeffMap.put(功率,系数);
}
//可以在输出中重新排列术语。
公共字符串toString(){
StringBuilder=新的StringBuilder();
forEach((power,coeff)->{builder.append(coeff+“x^”+power+”);});
返回builder.toString();
}
公共静态void main(字符串参数[]){
多项式q=新的多项式(2);
q、 setTerm(2,0);
q、 setTerm(0,1);
q、 setTerm(3,2);
系统输出println(q);
}
}
输出:2x^0 0x^1 3x^2


我希望这有帮助

另一种可能的实现方式是同时添加多个术语,如下所示:

package de;

import java.util.TreeMap;

public class Polynomial {
    //Private Fields
    private TreeMap<Integer, Integer> polys = new TreeMap<>();

    public Polynomial() {

    }
    public Polynomial(int... args){
        if(args.length < 2) polys.put(0, args[0]);

        for(int i= 0; i < args.length && i+1 < args.length; i = i+2){
            //                        coeff                      power
        polys.put(Integer.valueOf(args[i+1]), Integer.valueOf(args[i]));
        }
        if((args.length % 2) != 0){
            polys.put(0, args[args.length-1]);
        }
    }
    public void setTerm(int coeff, int power){
        polys.put(Integer.valueOf(power),Integer.valueOf(coeff));
    }

    public void setTerms(int... args){
        if(args.length < 2) polys.put(0, args[0]);

        for(int i= 0; i < args.length && i+1 < args.length; i = i+2){
            //                        coeff                      power
        polys.put(Integer.valueOf(args[i+1]), Integer.valueOf(args[i]));
        }
        if((args.length % 2) != 0){
            polys.put(0, args[args.length-1]);
        }
    }
    @Override
    public String toString(){
        StringBuilder sb = new StringBuilder();
        for(Integer key : polys.descendingKeySet()){
            Integer value = polys.get(key);
            if(value == 0) continue;
            if(value > 0 && sb.length() != 0) sb.append("+");

            sb.append(value.toString());
            if(key == 1) sb.append("x");
            if(key > 1) sb.append("x^" + key);

            }
            return sb.toString();
        }


    public static void main(String[] args) {
        Polynomial p = new Polynomial(1, 1, -2, 2, -3, 3, 7, 0);
        p.setTerm(17, 5);
        p.setTerms(23, 4, 0, 6);
        System.out.println(p.toString());
    }
}
package-de;
导入java.util.TreeMap;
公共类多项式{
//私人领域
private TreeMap polys=new TreeMap();
公共多项式(){
}
公共多项式(int…args){
if(args.length<2)polys.put(0,args[0]);
对于(int i=0;i0&&sb.length()!=0)sb.append(“+”);
sb.append(value.toString());
如果(键==1)某人追加(“x”);
如果(键>1)sb.追加(“x^”+键);
}
使某人返回字符串();
}
公共静态void main(字符串[]args){
多项式p=新的多项式(1,1,-2,2,-3,3,7,0);
p、 塞特姆(17,5);
p、 setTerms(23,4,0,6);
System.out.println(p.toString());
}
}
输出:17x^5+23x^4-3x^3-2x^2+1x+7


它从最高功率到最低功率排序,打印x而不是x^1,不打印x^0。

这不起作用。每次调用setTerm时,都会覆盖旧的设置。我建议您使用系数功率对列表/映射来解决此问题。本质上定义一个类术语,其中包含系数和幂作为成员,以及一个术语列表作为多项式类的成员。@ArunavSanyal:这几乎足以成为一个答案;你应该考虑一下你的评论。Yea,我简化了一点,然后给出了答案,非常感谢大家的帮助。我以前考虑过并尝试过列表,事实上我还在学习,还不熟悉它。很高兴看到java 8解决方案,您可以使用树映射来按电源排序。非常感谢,它真的很有帮助。我正在学习并尝试使用地图。我以前也尝试过使用数组。有一个私人的int terms[]我没有贴出来。我把它和幂和系数搞混了,永远也找不到正确的数组。你的想法很清楚,很有帮助,谢谢!!maxPower的构造函数似乎针对从0到maxPower的幂的数组。其他幂次,负数和更大的幂次是不可能的,而且数组是稀疏的,x^100将需要一个包含101个条目的数组。地图类型的解决方案更通用(而且更间接),但不需要maxPower。我明白你的想法。A.