JAVA 다항식 덧셈계산에서 p1.hapPoly(p2) 구현이 어렵습니다
조회수 1479회
ArrayList 클래스 (정정>> ArrList 입니다)
import java.util.NoSuchElementException;
public class ArrayList<E> { //ArrayList가 아닌 ArrList입니다.
private E a[];
private int size;
public ArrayList() {
a = (E[]) new Object[1];
size = 0;
}
public E peek(int k) {
if (size == 0 || k >= size)
throw new NoSuchElementException();
return a[k];
}
public boolean isEmpty() {
if (size == 0)
return true;
return false;
}
public void insertLast(E newItem) {
if (size == a.length)
resize(2 * a.length);
a[size++] = newItem;
}
private void resize(int newSize) {
E[] t = (E[]) new Object[newSize];
for (int i = 0; i < size; i++)
t[i] = a[i];
a = t;
}
public void insert(E newItem, int k) {
if (size == a.length)
resize(2 * a.length);
for (int i = size - 1; i >= k; i--)
a[i + 1] = a[i];
a[k] = newItem;
size++;
}
public void insert(E newItem) {
insertLast(newItem);
}
public E delete(int k) {
if (isEmpty())
throw new NoSuchElementException();
E item = a[k];
for (int i = k; i < size; i++)
a[i] = a[i + 1];
size--;
if (size > 0 && size <= a.length / 4)
resize(a.length / 2);
return item;
}
public void print() {
for (int i = 0; i < a.length; i++) {
if (i < size)
System.out.printf(a[i] + "\t");
else
System.out.printf("null\t");
}
System.out.println();
}
}
위 코드를 상속받아 ArrListPoly를 구현해야 합니다.
여기서 int k
: 최고 차수 / int[] arr
: 다항식의 계수인 메소드 hapPoly 구현방법을 모르겠습니다.
지금까지 작성한 ArrListPoly 클래스와 메인함수는 아래와 같습니다.
import java.util.NoSuchElementException;
class ArrListPoly extends ArrList{
int highestDegree;
private int k;
private int[] arr=new int[20];
public void setPoly(int highestDegree, int[] arr) {
int i;
for(i=arr.length-1;i>=0;i--) {
super.insertLast(arr[i]);
}
this.highestDegree=highestDegree;
}
public int getHighestDegree() {
return this.highestDegree;
}
void setPoly(int k){
this.k=k;
for(int i=0;i<=k;i++) { this.arr[i] = 0; }
}
public int getDegree() { return this.k; }
public int getArr(int i) { return this.arr[i]; }
public int setArr(int i, int arr) { return this.arr[i]=arr; }
}
public class ArrListPolyTest {
public static void main(String[] args) {
ArrListPoly p1 = new ArrListPoly();
int[] poly1 = { 2, 8, -4, 9, 1 };
int p1highestDegree = poly1.length - 1;
p1.setPoly(p1highestDegree, poly1);
printPolyEq(p1, 1);
ArrListPoly p2 = new ArrListPoly();
int[] poly2 = { 6, 2, 9 };
int p2highestDegree = poly2.length - 1;
p2.setPoly(p2highestDegree, poly2);
printPolyEq(p2, 3);
ArrListPoly p3 = p1.hapPoly(p2); // 해당 hapPoly 구현에서 막혔습니다.
printPolyEq(p3, 1);
}
public static void printPolyEq(ArrListPoly p, int nTabs) {
for (int i = 0; i < nTabs; i++)
System.out.printf("\t");
for (int i = p.getHighestDegree(); i >= 0; i--)
System.out.printf("%+d x%d\t", p.peek(i), i);
System.out.println();
}
}
ArrayList가 아닌 ArrList가 맞습니다. 상속받은 것도 ArrList가 맞습니다.
"int k: 최고 차수 / int[] arr: 다항식의 계수"은 메소드 setPoly(k,arr)에서 사용됩니다.
setPoly에서 다항식을 저장하고, hapPoly에서 차수에 맞게 p1과 p2 덧셈 후 새로운 다항식 p3에 저장하려는데 어떻게 해야 할 지 모르겠습니다ㅠㅠ
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
개념이 잘 안잡혀서 하는 질문인것 같으니 힌트만 드릴께요.
hapPoly()
에서 리스트 두 개를 계산한 결과를 만드려면 (1)일단hapPoly()
메서드에서p1
과p2
의 실제 값이 있는 리스트ArrList.a
에 접근할 수 있어야겠죠. (2)그리고highestDegree
에 접근할 수 있어야 합니다.int highestDegree; public ArrListPoly hapPoly(ArrListPoly p2) { System.out.println(this.highestDegree); System.out.println(p2.highestDegree); }
(2)는 이미 가능하니까 (1)만 다시 보면:
public class ArrList<E> { private E a[]; private int size; ... public int getSize() { return this.size; } }
public ArrListPoly hapPoly(ArrListPoly p2) { for (int i = 0; i < super.getSize(); ++i) { int ele = (Integer) super.peek(i); System.out.println("index: " + i + ", value: " + ele); } for (int i = 0; i < p2.getSize(); ++i) { int ele = (Integer) p2.peek(i); System.out.println("index: " + i + ", value: " + ele); } // 여기서 p1(super)와 p2의 a로 뭔가를 함 // 새 리스트를 만들어서 원하는 값을 할당 후 반환 }
이런식으로
ArrList
에서 메서드를 제공해야 합니다. 이 예시에서는getSize()
라는 메서드만 추가한 뒤ArrList.peek()
을 활용한 방식이구요. 이것 외에ArrList.a
를 직접 반환한다거나 이터레이터를 제공한다거나 하는 방법이 있습니다만, 무슨 방법이 됐든 요지는hapPoly
에서ArrList.a
의 값에 접근할 수 있어야 한다는 겁니다.그런 다음에는 해당 값들을 지지고 볶아서 반환하면 됩니다.
댓글 입력