Полиномы печатаются неправильноJAVA

Программисты JAVA общаются здесь
Anonymous
Полиномы печатаются неправильно

Сообщение Anonymous »

Я пишу программу, предназначенную для приема до двух полиномов, введенных пользователем (введенных в удобном для пользователя формате, например «2x^2+3x-4»), сохранения их в двух двусвязных списках, а затем позволяющего пользователю складывать полиномы вместе и выводить результат. У меня есть программа, принимающая ввод пользователя и анализирующая полиномы, но во время некоторого тестирования, когда программа просто снова выводила полиномы, я обнаружил, что она выводит их неправильно.
Вот мой текущий класс для создания узлов, сортировки их в соответствующий список и метод для последующей печати этих списков:

Код: Выделить всё

package polynomialAdder;

public class PolyList {
private PolyNode head;

public PolyList()
{
this.head = null;
}

public PolyList(String poly)
{
this.head = null;
String[] component = poly.split("\\+\\-"); //split based on "+" and "-" operators
for(String term : component)
{
term = term.trim();
int coe, exp;
if(term.contains("x")) //check if given term has an exponent and set it as such, otherwise set exp to 0 and omit "x^"
{
String[] parts = term.split("x\\^?");
coe = Integer.parseInt(parts[0]);
exp = (parts.length == 2) ? Integer.parseInt(parts[1]) : 1;
}
else
{
coe = Integer.parseInt(term);
exp = 0;
}
insertionSort(new PolyNode(coe, exp));
}
}

private void insertionSort(PolyNode newNode)
{
if(head == null || newNode.exp > head.exp) //sets the new node as the head if the list is empty or if its exponent is higher than that of the head
{
newNode.next = head;
head = newNode;
}
else //traverses through the list, adding coefficients together if they share an exponent
{
PolyNode current = head;
while(current.next != null && current.next.exp >= newNode.exp)
{
if(current.next.exp == newNode.exp)
{
newNode.coe += current.next.coe;
newNode.next = current.next.next;
current.next.next.prev = newNode;
current.next = newNode;
}
current = current.next;
}
newNode.next = current.next;
current.next = newNode;
}
}

public void print()
{
PolyNode current = head;
StringBuilder result = new StringBuilder();
while(current != null)
{
result.append(current.coe).append("x^").append(current.exp);
if(current.next != null && current.coe < 0)
{
result.append("-");
}
else if(current.next != null && current.coe > 0)
{
result.append("+");
}
current = current.next;
}
System.out.println(result);
}
}
И это мой текущий основной метод:

Код: Выделить всё

package polynomialAdder;

import java.util.*;

public class Main
{
public static void main(String[] args)
{
Scanner polyScan = new Scanner(System.in);
System.out.println("Enter first polynomial. Please use ^ to indicate exponents");
String polyA = polyScan.nextLine();
PolyList poly1 = new PolyList(polyA);
System.out.println("Enter second polynomial.  Please use ^ to indicate exponents");
String polyB = polyScan.nextLine();
PolyList poly2 = new PolyList(polyB);
polyScan.close();
poly1.print();
poly2.print();
}
}
класс:

Код: Выделить всё

package polynomialAdder;

public class PolyNode {
int coe;
int exp;
PolyNode next;
PolyNode prev;

PolyNode(int coe, int exp)
{
this.coe = coe;
this.exp = exp;
this.next = null;
this.prev = null;
}
}
Для ясности: два вызова метода print() в main не являются окончательными. Я использовал их для тестирования, чтобы убедиться, что списки заполняются правильно.
Проблема заключается в том, что я получаю неправильные выходные данные от метода print().

Если я ввожу, например, «2x^2+3x-4», то на выходе я получаю «2x^1», который, как я заметил, привязан к else моего условного оператора, но я не могу понять, почему он дает мне этот результат.

Подробнее: https://stackoverflow.com/questions/799 ... g-properly

Вернуться в «JAVA»