java - 尝试使用 ArrayList 求解用户给定方程的导数

标签 java arraylist

作为我的 AP 计算机科学项目的一部分,我决定从用户那里获取一个多项式,它将能够使用幂法则找到方程的导数。

例如,如果用户输入 2X^3+5x^2,则应输出 6x^2+10x^1,因此系数和次数相乘,得到那么度数就只是负一。这是我到目前为止所拥有的,但它给了我很多错误,并尝试遵循代码,但没有发现任何问题。感谢您的帮助。

import java.util.ArrayList;
import java.util.Scanner;


public class Practice {

    public static void main(String[] args) {    

        //input of polynomial 
        System.out.println("Enter polynomial:");

        Scanner sc = new Scanner(System.in);
        String polynomialEquation = sc.nextLine();

        //A string array list is created with the polynomial
        ArrayList<String> equationArr = new ArrayList<String>();

        for (int i = 0; i<polynomialEquation.length(); i++) {
            equationArr.add(polynomialEquation.substring(i, i+1));
        }

        ArrayList<String> intStrings = new ArrayList<String>();

        //separate the numbers from the list

        for(int i =0; i<equationArr.size(); i++) {
            if (equationArr.get(i).equals("1") || equationArr.get(i).equals("2") || equationArr.get(i).equals("3") ||equationArr.get(i).equals("4") ||equationArr.get(i).equals("5") || 
            equationArr.get(i).equals("6") || equationArr.get(i).equals("7") || equationArr.get(i).equals("8") || equationArr.get(i).equals("9") || equationArr.get(i).equals("0"))
            {
                String addVal = equationArr.get(i);
                intStrings.add(addVal);
                equationArr.remove(i);  

            }
        }   


            //convert string integers to integers
        ArrayList<Integer> deriveInt  = new ArrayList<Integer>(intStrings.size());

        for (String myInt : intStrings) 
        { 
          deriveInt.add(Integer.valueOf(myInt)); 
        }


        //derive coefficiants 

        for (int i = 0; i<deriveInt.size()-1;i +=2) {

            deriveInt.set(i, deriveInt.get(i)*deriveInt.get(i+1));

        }

        //derive exponent

        for(int i = 1; i< deriveInt.size(); i +=2) {

            deriveInt.set(i,deriveInt.get(i)-1);        

        }

        //convert integer back to string
        ArrayList<String> stringDerive = new ArrayList<String>();

        for (Integer myInt2 : deriveInt) 
        { 
          stringDerive.add(String.valueOf(myInt2)); 
        }

        //get the signs from the original equation

                ArrayList<String> sign = new ArrayList<String>();

        for(int i =0; i<equationArr.size(); i++) {

            if(equationArr.get(i).equals("+") || equationArr.get(i).equals("-")) {

                sign.add(equationArr.get(i));

            }
        }

        int totalSize = stringDerive.size() * 2 + equationArr.size();

        for (int i = 0; i<totalSize-1; i=+2) {

            int countSign= 0;

            System.out.print(stringDerive.get(i));
            System.out.print("x^");
            System.out.print(stringDerive.get(i+1));
            System.out.print(equationArr.get(countSign));

        }
    }
}

最佳答案

多项式由单项式组成。在您的示例中,这些是 2X^35x^2。解决问题的方法之一是编写 Monom 类和 Polynom 类。我会给你一个骨架,这样你就可以练习。

public class Helper {

        private class Monom{

            private int coefficient;
            private int degree;

            public Monom(int coefficient, int degree){
                this.coefficient = coefficient;
                this.degree = degree;
            }

            public Monom(String input){
                //TODO parse input. E.g Monom("6x^2) --> this.coefficient = 6...
                //TODO validate input
            }

            public Monom derivate(final Monom monom){
                return new Monom(monom.getCoefficient() * monom.getDegree(), monom.getDegree() - 1);
            }

            public int getCoefficient() {
                return coefficient;
            }

            public int getDegree() {
                return degree;
            }

            @Override
            public String toString(){
                return this.coefficient + "x^" + this.degree;
            }
        }

        //skeleton
        private class Polynom{

            private List<Monom> polynom; //holder of monoms
            //TODO rest of code including constructors, validate, derivate...

            public Polynom(List<Monom> monoms){
                this.polynom = monoms;
            }
            public Polynom derivate(Polynom input){
                List<Monom> temp = new ArrayList<>();
                for (Monom monom: polynom){
                    temp.add(monom.derivate(monom));
                }
                return new Polynom(temp);
            }
        }

        public static void main(String[] args) {

            //TODO test code
            List<Monom> monoms = new ArrayList<>();
            //TODO rest of code like:
            // Polynom myPolynom = new Polynom(List<Monom> monoms);
            //...

        }

}

就像我说的,这只是必须升级的代码...祝你好运。

关于java - 尝试使用 ArrayList 求解用户给定方程的导数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53652473/

相关文章:

java - 为什么我在迭代期间从 ArrayList 中删除元素时没有得到 ConcurrentModificationException

java - 从 Java 8 函数创建请求范围的 beans

java - 如何在 squareup.okhttp3 中缓存响应

java - 在 Java 中获取可用 RAM

java - 我怎样才能使 log4j fileAppender 正确转义 ${java.io.tmpdir} 的内容

java - Spring Boot MongoDB Persistance MappingException : Cannot convert Java. util.ArrayList 到类 java.lang.Object 的实例中

Java List列表转String[]

java - 如何反转在​​不同类中创建的 ImageIcon 数组的内容?

java - 使用递归对数字 ArrayList 进行排列

java - 安卓工作室 : How to start TexttoSpeech after 10 seconds?