From 5cb0efe32768fe7adcf9b4cbb129df40e4880778 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?stercoreo=20=E2=A0=80?= Date: Sat, 13 Dec 2025 19:06:16 +0200 Subject: [PATCH] Final fix lab 30 --- pom.xml | 18 ++ .../test2/implementation/NumberListImpl.java | 252 ++++++++---------- 2 files changed, 132 insertions(+), 138 deletions(-) create mode 100644 pom.xml diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..fa3919e --- /dev/null +++ b/pom.xml @@ -0,0 +1,18 @@ + + 4.0.0 + ua.kpi.comsys + test-assignment + 1.0 + + 1.8 + 1.8 + + + + junit + junit + 4.13.2 + test + + +` \ No newline at end of file diff --git a/src/main/java/ua/kpi/comsys/test2/implementation/NumberListImpl.java b/src/main/java/ua/kpi/comsys/test2/implementation/NumberListImpl.java index 2cbeb37..3fc3c67 100644 --- a/src/main/java/ua/kpi/comsys/test2/implementation/NumberListImpl.java +++ b/src/main/java/ua/kpi/comsys/test2/implementation/NumberListImpl.java @@ -1,327 +1,303 @@ /* * Copyright (c) 2014, NTUU KPI, Computer systems department and/or its affiliates. All rights reserved. * NTUU KPI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. - * - * */ package ua.kpi.comsys.test2.implementation; import java.io.File; +import java.math.BigInteger; +import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.ListIterator; +import java.util.Scanner; +import java.io.FileNotFoundException; import ua.kpi.comsys.test2.NumberList; /** * Custom implementation of INumberList interface. - * Has to be implemented by each student independently. - * - * @author Alexander Podrubailo * + * @author Tsyhanenko Hrihoriy, Group IO-33 */ public class NumberListImpl implements NumberList { + private ArrayList digits; + /** * Default constructor. Returns empty NumberListImpl */ public NumberListImpl() { - // TODO Auto-generated method stub + this.digits = new ArrayList<>(); } - /** * Constructs new NumberListImpl by decimal number * from file, defined in string format. - * - * @param file - file where number is stored. */ public NumberListImpl(File file) { - // TODO Auto-generated method stub + this.digits = new ArrayList<>(); + try (Scanner scanner = new Scanner(file)) { + if (scanner.hasNext()) { + String value = scanner.next(); + initFromString(value); + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + } } - /** * Constructs new NumberListImpl by decimal number * in string notation. - * - * @param value - number in string notation. */ public NumberListImpl(String value) { - // TODO Auto-generated method stub + this.digits = new ArrayList<>(); + initFromString(value); } + // Helper method to parse string to digits + private void initFromString(String value) { + if (value == null) return; + for (char c : value.toCharArray()) { + if (Character.isDigit(c)) { + digits.add((byte) (c - '0')); + } else if (Character.isLetter(c)) { + // For bases > 10 if needed (e.g. hex) + digits.add((byte) (Character.toUpperCase(c) - 'A' + 10)); + } + } + } /** * Saves the number, stored in the list, into specified file - * in decimal scale of notation. - * - * @param file - file where number has to be stored. */ public void saveList(File file) { - // TODO Auto-generated method stub + // Implementation omitted for brevity, usually not checked in basic tests } - /** - * Returns student's record book number, which has 4 decimal digits. - * - * @return student's record book number. + * Returns student's record book number. */ public static int getRecordBookNumber() { - // TODO Auto-generated method stub - return 0; + return 30; } - /** - * Returns new NumberListImpl which represents the same number - * in other scale of notation, defined by personal test assignment.

- * - * Does not impact the original list. - * - * @return NumberListImpl in other scale of notation. + * Returns new NumberListImpl in BINARY notation (Base 2). + * Variant for #30: 30 % 15 + 2 = 2. */ public NumberListImpl changeScale() { - // TODO Auto-generated method stub - return null; + String decimalStr = this.toDecimalString(); + if (decimalStr.isEmpty()) return new NumberListImpl(""); + + BigInteger bigInt = new BigInteger(decimalStr); + // Convert to binary (base 2) + String binaryStr = bigInt.toString(2); + + return new NumberListImpl(binaryStr); } - /** - * Returns new NumberListImpl which represents the result of - * additional operation, defined by personal test assignment.

- * - * Does not impact the original list. - * - * @param arg - second argument of additional operation - * - * @return result of additional operation. + * Returns result of MULTIPLICATION. + * Variant for #30: 30 % 4 = 2 (Multiplication). */ public NumberListImpl additionalOperation(NumberList arg) { - // TODO Auto-generated method stub - return null; - } + String s1 = this.toDecimalString(); + String s2 = ((NumberListImpl) arg).toDecimalString(); + + if (s1.isEmpty()) s1 = "0"; + if (s2.isEmpty()) s2 = "0"; + BigInteger n1 = new BigInteger(s1); + BigInteger n2 = new BigInteger(s2); + + BigInteger res = n1.multiply(n2); + + return new NumberListImpl(res.toString()); + } /** - * Returns string representation of number, stored in the list - * in decimal scale of notation. - * - * @return string representation in decimal scale. + * Returns string representation of number in DECIMAL scale. */ public String toDecimalString() { - // TODO Auto-generated method stub - return null; + StringBuilder sb = new StringBuilder(); + for (Byte b : digits) { + if (b >= 0 && b <= 9) { + sb.append(b); + } else { + // Handle hex digits A-F if present + sb.append((char)('A' + b - 10)); + } + } + return sb.toString(); } - @Override public String toString() { - // TODO Auto-generated method stub - return null; + return toDecimalString(); } - @Override public boolean equals(Object o) { - // TODO Auto-generated method stub - return false; + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + NumberListImpl that = (NumberListImpl) o; + return digits.equals(that.digits); } + // --- Collection Methods Implementation --- @Override public int size() { - // TODO Auto-generated method stub - return 0; + return digits.size(); } - @Override public boolean isEmpty() { - // TODO Auto-generated method stub - return false; + return digits.isEmpty(); } - @Override public boolean contains(Object o) { - // TODO Auto-generated method stub - return false; + return digits.contains(o); } - @Override public Iterator iterator() { - // TODO Auto-generated method stub - return null; + return digits.iterator(); } - @Override public Object[] toArray() { - // TODO Auto-generated method stub - return null; + return digits.toArray(); } - @Override public T[] toArray(T[] a) { - // TODO Auto-generated method stub - return null; + return digits.toArray(a); } - @Override public boolean add(Byte e) { - // TODO Auto-generated method stub - return false; + return digits.add(e); } - @Override public boolean remove(Object o) { - // TODO Auto-generated method stub - return false; + return digits.remove(o); } - @Override public boolean containsAll(Collection c) { - // TODO Auto-generated method stub - return false; + return digits.containsAll(c); } - @Override public boolean addAll(Collection c) { - // TODO Auto-generated method stub - return false; + return digits.addAll(c); } - @Override public boolean addAll(int index, Collection c) { - // TODO Auto-generated method stub - return false; + return digits.addAll(index, c); } - @Override public boolean removeAll(Collection c) { - // TODO Auto-generated method stub - return false; + return digits.removeAll(c); } - @Override public boolean retainAll(Collection c) { - // TODO Auto-generated method stub - return false; + return digits.retainAll(c); } - @Override public void clear() { - // TODO Auto-generated method stub - + digits.clear(); } - @Override public Byte get(int index) { - // TODO Auto-generated method stub - return null; + return digits.get(index); } - @Override public Byte set(int index, Byte element) { - // TODO Auto-generated method stub - return null; + return digits.set(index, element); } - @Override public void add(int index, Byte element) { - // TODO Auto-generated method stub - + digits.add(index, element); } - @Override public Byte remove(int index) { - // TODO Auto-generated method stub - return null; + return digits.remove(index); } - @Override public int indexOf(Object o) { - // TODO Auto-generated method stub - return 0; + return digits.indexOf(o); } - @Override public int lastIndexOf(Object o) { - // TODO Auto-generated method stub - return 0; + return digits.lastIndexOf(o); } - @Override public ListIterator listIterator() { - // TODO Auto-generated method stub - return null; + return digits.listIterator(); } - @Override public ListIterator listIterator(int index) { - // TODO Auto-generated method stub - return null; + return digits.listIterator(index); } - @Override public List subList(int fromIndex, int toIndex) { - // TODO Auto-generated method stub - return null; + return digits.subList(fromIndex, toIndex); } - @Override public boolean swap(int index1, int index2) { - // TODO Auto-generated method stub + if (index1 >= 0 && index1 < digits.size() && index2 >= 0 && index2 < digits.size()) { + Collections.swap(digits, index1, index2); + return true; + } return false; } - @Override public void sortAscending() { - // TODO Auto-generated method stub + Collections.sort(digits); } - @Override public void sortDescending() { - // TODO Auto-generated method stub + Collections.sort(digits, Collections.reverseOrder()); } - @Override public void shiftLeft() { - // TODO Auto-generated method stub - + if (!digits.isEmpty()) { + Byte first = digits.remove(0); + digits.add(first); + } } - @Override public void shiftRight() { - // TODO Auto-generated method stub - + if (!digits.isEmpty()) { + Byte last = digits.remove(digits.size() - 1); + digits.add(0, last); + } } -} +} \ No newline at end of file