मैं कोडिंग के लिए बहुत नया हूं इसलिए अभी भी संघर्ष कर रहा हूं और अपने कोड के साथ थोड़ी समस्या है। इस कोड के लिए, मुझे सूची में पैरामीटर c (गुणांक) और e (घातांक) के साथ पॉलीटर जोड़कर ArrayList का उपयोग करके एक बहुपद फ़ंक्शन बनाने वाला है। मैं कोड का निर्माण करने में सक्षम था; हालाँकि, जब भी मैं परीक्षण कोड चलाने की कोशिश करता हूं तो यह हमेशा कहता है कि मेरा पॉलीटर्म सूची में नहीं जोड़ा गया था। मुझे आश्चर्य है कि क्या आप लोगों में से कोई कृपया मेरी सहायता कर सकता है?

यहाँ मेरे कोड हैं।

package polynomials;
import java.util.ArrayList;

public class Polynomial {
    public ArrayList<PolyTerm> terms;
    /**
     * initialize terms to be an empty list
     */
    public Polynomial() {
        //to be completed
        terms = new ArrayList<PolyTerm>();
    }

    /**
     * add a term with the given coefficient and exponent to the list.
     * if a term with given exponent already exists, its coefficient should be updated accordingly. 
     * @param c (coefficient)
     * @param e (exponent)
     */
    public void addTermBasic(double c, int e) { 
        //to be completed
        PolyTerm p = new PolyTerm(c, e);
        for (int i = 0; i < terms.size(); i++) {
            if(p.exponent == terms.get(i).exponent) {
                if (terms.get(i).coefficient + p.coefficient == 0) {
                    terms.remove(i);
                } else {
                    terms.get(i).coefficient = terms.get(i).coefficient + p.coefficient;
                }
            } else {
                terms.add(new PolyTerm(p.coefficient, p.exponent));
            }
        }   
    }
}

और यहाँ पाठ कोड हैं

package polynomials;
import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.*;

import java.io.*;
import java.lang.reflect.*;
import java.util.*;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class PolynomialTest {
    public static int score = 0;
    public static String result = "";
    public static String currentMethodName = null;
    ArrayList<String> methodsPassed = new ArrayList<String>();

    Polynomial p1, p2, p3, p4;

    @BeforeEach
    public void setUp() throws Exception {
        currentMethodName = null;

        p1 = new Polynomial();
        p1.addTermBasic(new PolyTerm(1, 2));
        p1.addTermBasic(new PolyTerm(-2, 1));
        p1.addTermBasic(new PolyTerm(1, 0));
        //p1 represents x^2 - 2x + 1

        p2 = new Polynomial();
        p2.addTermBasic(new PolyTerm(-2, 5));
        p2.addTermBasic(new PolyTerm(5, 3));
        p2.addTermBasic(new PolyTerm(1, 2));
        //p2 represents -2x^5 + 5x^3 + x^2

        p3 = new Polynomial();
        //p3 represents an empty polynomial

        p4 = new Polynomial();
        p4.addTermBasic(new PolyTerm(6, 4));
        //p4 represents 6x^4
    }

    @Test @Order(1) @Graded(description="Polynomial()", marks=2)
    public void testPolynomial() {
        assertNotNull(p3);
        assertNotNull(p3.terms); 
        assertEquals(0, p3.terms.size());
        currentMethodName = new Throwable().getStackTrace()[0].getMethodName();
    }

    @Test @Order(2) @Graded(description="addTermBasic(double, int)", marks=20)
    public void testAddTermBasicDoubleInt() {
        assertNotNull(p1.terms);        
        **assertEquals(3, p1.terms.size());**       
        assertEquals(1, p1.terms.get(0).coefficient, 0.001);
        assertEquals(2, p1.terms.get(0).exponent);
        assertEquals(-2, p1.terms.get(1).coefficient, 0.001);
        assertEquals(1, p1.terms.get(1).exponent);
        assertEquals(1, p1.terms.get(2).coefficient, 0.001);
        assertEquals(0, p1.terms.get(2).exponent);

        p1.addTermBasic(1.5, 2);
        assertEquals(3, p1.terms.size());       
        assertEquals(2.5, p1.terms.get(0).coefficient, 0.001);
        assertEquals(2, p1.terms.get(0).exponent);

        p1.addTermBasic(-5, 0);
        assertEquals(3, p1.terms.size());       
        assertEquals(-4, p1.terms.get(2).coefficient, 0.001);
        assertEquals(0, p1.terms.get(2).exponent);

        p1.addTermBasic(4, 0); //adding 4x^0 to -4x^0
        assertEquals(2, p1.terms.size());       
        assertEquals(2.5, p1.terms.get(0).coefficient, 0.001);
        assertEquals(2, p1.terms.get(0).exponent);
        assertEquals(-2, p1.terms.get(1).coefficient, 0.001);
        assertEquals(1, p1.terms.get(1).exponent);


        p1.addTermBasic(-1.2, 6);
        assertEquals(3, p1.terms.size());       
        assertEquals(-1.2, p1.terms.get(2).coefficient, 0.001);
        assertEquals(6, p1.terms.get(2).exponent);

        p2.addTermBasic(1, 4);
        assertEquals(4, p2.terms.size());       
        assertEquals(1, p2.terms.get(3).coefficient, 0.001);
        assertEquals(4, p2.terms.get(3).exponent);  

        p2.addTermBasic(-1, 4);
        assertEquals(3, p2.terms.size());       
        assertEquals(1, p2.terms.get(2).coefficient, 0.001);
        assertEquals(2, p2.terms.get(2).exponent);  

        p2.addTermBasic(0, 8);
        assertEquals(3, p2.terms.size());       
        assertEquals(1, p2.terms.get(2).coefficient, 0.001);
        assertEquals(2, p2.terms.get(2).exponent);  
        currentMethodName = new Throwable().getStackTrace()[0].getMethodName();
    }
}

त्रुटि जो मुझे हमेशा प्राप्त होती है, AsForionFailedError: exted <3> लेकिन यह था: <0> परीक्षण कोड लाइन 54 में बोल्ड लाइन पर

मैंने सुझाव के दोनों की कोशिश की है; हालाँकि, त्रुटि अभी भी वही है। इसलिए, मैंने एक एकल .add () का उपयोग करने की कोशिश की, यह देखने के लिए कि क्या कोई पॉलीटर्म जोड़ा जाता है या नहीं, लेकिन मैं अभी भी एक खाली सूची के साथ समाप्त हुआ।

public void addTermBasic(double c, int e) { 
        //to be completed
        PolyTerm p = new PolyTerm(c, e);
        terms.add(p);
    }
0
davenqk 5 नवम्बर 2020, 13:18

2 जवाब

सबसे बढ़िया उत्तर

आपका तर्क त्रुटिपूर्ण है।

    for (int i = 0; i < terms.size(); i++) {
        if(terms.get(i)...) {
            ... 
        } else {
            terms.add(...);
        }
    } 

यदि सूची शुरू में खाली है, तो यह लूप कुछ भी नहीं करेगा, और दूसरा क्लॉज भी नहीं होगा, इसलिए कभी भी कोई शब्द नहीं जोड़ा जाएगा।

लूप के लिए एक और खंड नहीं है, लेकिन आप इसे ठीक करने के लिए बूलियन का उपयोग कर सकते हैं:

   boolean found = false;
   for (int i = 0; i < terms.size(); i++) {
        if(terms.get(i)...) {
            ... 
            found = true;
        }
    }  
    if (!found) {
        terms.add(...);            
    } 
1
GreyFairer 5 नवम्बर 2020, 10:34

डिबग करना सीखें। कोड के माध्यम से कदम (एक डिबगर के साथ, या यदि आपको चाहिए, तो बहुत सी-ईएस लेकिन यथार्थवादी इनपुट का उपयोग करके सिस्टम के बारे में बहुत कुछ)। और कागज अगर आपको चाहिए वहाँ जहाँ आप और कंप्यूटर असहमत हैं? आपको एक बग मिला।

सुझाव: आप .add() लूप addTermBasic के {{एक्स 1}} लूप को कॉल करते हैं। यह सही नहीं है।

1
rzwitserloot 5 नवम्बर 2020, 10:32