Advertisement
simeon105

[НП] Низа од цели броеви

Nov 24th, 2020 (edited)
906
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.86 KB | None | 0 0
  1. /*
  2. Да се напише класа која чува низа на цели броеви IntegerArray. Класата треба да е immutable. Тоа значи дека, откако еднаш ќе се инстанцира да не може да се менува состојбата на објектот, односно да не може да се менуваат податоците зачувани во него и да не може да се наследува од неа final. За потребите на класата треба да се имплементираат следните public методи:
  3.  
  4. IntegerArray(int a[]) - конструктор кој прима низа од цели броеви
  5. length():int - метод кој ја враќа должината на низата
  6. getElementAt(int i):int - го враќа елементот на позиција i, може да претпоставите дека индекост i секогаш ќе има вредност во интервалот [0,length()-1]
  7. sum():int - метод кој ја враќа сумата на сите елемeнти во низата
  8. average():double - метод кој ја враќа средната вредност на елементите во низата - аритметичка средина
  9. getSorted():IntegerArray- враќа нов објект од истата класа кој ги содржи истите вредности од тековниот објект, но сортирани во растечки редослед
  10. concat(IntegerArray ia):IntegerArray - враќа нов објект од истата класа во кој се содржат сите елементи од this објектот и по нив сите елементи од ia објектот притоа запазувајќи го нивниот редослед
  11. toString():String - враќа текстуална репрезентација на објектот каде елементите се одделени со запиркa и едно празно место после запирката и на почетокот и крајот на стрингот има средни загради. Пример за низа која ги содржи боревите 2,1 и 4 враќа "[2, 1, 4]".
  12. Покрај класата IntegerArray треба да напишете дополнително уште една класа која ќе служи за вчитување на низа од цели броеви од влезен тек на податоци. Оваа класа треба да се вика ArrayReader и во неа треба да имате еден public static метод за вчитување на низа од цели броеви од InputStream.
  13.  
  14. readIntegerArray(InputStream input):IntegerArray - вчитува низа од цели броеви од input зададена во следниот формат: Во првата линија има еден цел борј кој кажува колку елементи има во низата, а во наредниот ред се дадени елементите на низата одделени со едно или повеќе празни места. Помош, искористете ја класата java.util.Scanner.
  15. Секогаш кога работите со низи во Java можете да искористите дел од методите во класата Arrays. За да пристапите до класата најпрвин треба да ја импортирате со следнава наредба
  16.  
  17. import java.util.Arrays;
  18. Во продолжение се дадени дел од методите кои можат да ви помогнат. За тоа како работат консултираје ја нивната документација.
  19.  
  20. copyOf(int[] original, int newLength)
  21.  
  22. equals(int[] a, int[] a2)
  23.  
  24. sort(int[] a)
  25.  
  26. Sample input
  27. testSimpleMethods
  28. 2
  29. Sample output
  30. 7
  31. 7 -5 2 4 5 1 14
  32. [7, -5, 2, 4, 5, 1, 14]
  33. 28
  34. 4.00
  35. */
  36. import java.io.ByteArrayInputStream;
  37. import java.io.IOException;
  38. import java.io.InputStream;
  39. import java.util.Arrays;
  40. import java.util.Random;
  41. import java.util.Scanner;
  42.  
  43. final class IntegerArray {
  44.     private final int[] niza;
  45.     public IntegerArray(int[] a)
  46.     {
  47.         this.niza = Arrays.copyOf(a, a.length);
  48.     }
  49.     public int length()
  50.     {
  51.         return niza.length;
  52.     }
  53.     public int getElementAt(int i)
  54.     {
  55.         return niza[i];
  56.     }
  57.     public int sum()
  58.     {
  59.         int sum = 0;
  60.         for(int i=0;i<niza.length;i++)
  61.         {
  62.             sum += niza[i];
  63.         }
  64.         return sum;
  65.     }
  66.     public double average()
  67.     {
  68.         return Double.valueOf(sum()) / length();
  69.     }
  70.     public IntegerArray getSorted()
  71.     {
  72.         int[] pp = Arrays.copyOf(niza, niza.length);
  73.         Arrays.sort(pp);
  74.         IntegerArray obj = new IntegerArray(pp);
  75.         return obj;
  76.     }
  77.     public IntegerArray concat(IntegerArray ia)
  78.     {
  79.         int[] newNiza = new int[this.niza.length + ia.length()];
  80.         for(int i=0;i<this.niza.length + ia.length();i++)
  81.         {
  82.             if(i < this.niza.length)
  83.             {
  84.                 newNiza[i] = this.niza[i];
  85.             }
  86.             else
  87.             {
  88.                 newNiza[i] = ia.getElementAt(i - this.niza.length);
  89.             }
  90.         }
  91.         IntegerArray obj = new IntegerArray(newNiza);
  92.         return obj;
  93.     }
  94.     @Override
  95.     public String toString()
  96.     {
  97.         String rez = new String();
  98.         rez += "[";
  99.         rez += this.niza[0];
  100.         for(int i=1;i<this.niza.length;i++)
  101.         {
  102.             rez += ", ";
  103.             rez += this.niza[i];
  104.         }
  105.         rez += "]";
  106.         return rez;
  107.     }
  108.     public boolean equals(IntegerArray obj)
  109.     {
  110.         boolean tf = true;
  111.         for(int i=0;i<Math.min(this.niza.length, obj.length());i++)
  112.         {
  113.             if(this.niza[i] != obj.getElementAt(i))
  114.             {
  115.                 tf = false;
  116.                 break;
  117.             }
  118.         }
  119.         if(tf&&(this.niza.length == obj.length()))
  120.         {
  121.             return true;
  122.         }
  123.         return false;
  124.     }
  125. }
  126.  
  127. class ArrayReader {
  128.     public static IntegerArray readIntegerArray(InputStream input)
  129.     {
  130.         Scanner scan = new Scanner(input);
  131.         int n = scan.nextInt();
  132.         int[] arr = new int[n];
  133.         for(int i=0;i<n;i++)
  134.         {
  135.             arr[i] = scan.nextInt();
  136.         }
  137.         scan.close();
  138.        
  139.         IntegerArray obj = new IntegerArray(arr);
  140.         return obj;
  141.     }
  142. }
  143.  
  144. public class IntegerArrayTester {
  145.  
  146.     public static void main(String[] args) {
  147.         Scanner scanner = new Scanner(System.in);
  148.         String s = scanner.nextLine();
  149.         IntegerArray ia = null;
  150.         switch (s) {
  151.             case "testSimpleMethods":
  152.                 ia = new IntegerArray(generateRandomArray(scanner.nextInt()));
  153.                 testSimpleMethods(ia);
  154.                 break;
  155.             case "testConcat":
  156.                 testConcat(scanner);
  157.                 break;
  158.             case "testEquals":
  159.                 testEquals(scanner);
  160.                 break;
  161.             case "testSorting":
  162.                 testSorting(scanner);
  163.                 break;
  164.             case "testReading":
  165.                 testReading(new ByteArrayInputStream(scanner.nextLine().getBytes()));
  166.                 break;
  167.             case "testImmutability":
  168.                 int a[] = generateRandomArray(scanner.nextInt());
  169.                 ia = new IntegerArray(a);
  170.                 testSimpleMethods(ia);
  171.                 testSimpleMethods(ia);
  172.                 IntegerArray sorted_ia = ia.getSorted();
  173.                 testSimpleMethods(ia);
  174.                 testSimpleMethods(sorted_ia);
  175.                 sorted_ia.getSorted();
  176.                 testSimpleMethods(sorted_ia);
  177.                 testSimpleMethods(ia);
  178.                 a[0] += 2;
  179.                 testSimpleMethods(ia);
  180.                 ia = ArrayReader.readIntegerArray(new ByteArrayInputStream(integerArrayToString(ia).getBytes()));
  181.                 testSimpleMethods(ia);
  182.                 break;
  183.         }
  184.         scanner.close();
  185.     }
  186.  
  187.     static void testReading(InputStream in) {
  188.         IntegerArray read = ArrayReader.readIntegerArray(in);
  189.         System.out.println(read);
  190.     }
  191.  
  192.     static void testSorting(Scanner scanner) {
  193.         int[] a = readArray(scanner);
  194.         IntegerArray ia = new IntegerArray(a);
  195.         System.out.println(ia.getSorted());
  196.     }
  197.  
  198.     static void testEquals(Scanner scanner) {
  199.         int[] a = readArray(scanner);
  200.         int[] b = readArray(scanner);
  201.         int[] c = readArray(scanner);
  202.         IntegerArray ia = new IntegerArray(a);
  203.         IntegerArray ib = new IntegerArray(b);
  204.         IntegerArray ic = new IntegerArray(c);
  205.         System.out.println(ia.equals(ib));
  206.         System.out.println(ia.equals(ic));
  207.         System.out.println(ib.equals(ic));
  208.     }
  209.  
  210.     static void testConcat(Scanner scanner) {
  211.         int[] a = readArray(scanner);
  212.         int[] b = readArray(scanner);
  213.         IntegerArray array1 = new IntegerArray(a);
  214.         IntegerArray array2 = new IntegerArray(b);
  215.         IntegerArray concatenated = array1.concat(array2);
  216.         System.out.println(concatenated);
  217.     }
  218.  
  219.     static void testSimpleMethods(IntegerArray ia) {
  220.         System.out.print(integerArrayToString(ia));
  221.         System.out.println(ia);
  222.         System.out.println(ia.sum());
  223.         System.out.printf("%.2f\n", ia.average());
  224.     }
  225.  
  226.  
  227.     static String integerArrayToString(IntegerArray ia) {
  228.         StringBuilder sb = new StringBuilder();
  229.         sb.append(ia.length()).append('\n');
  230.         for (int i = 0; i < ia.length(); ++i)
  231.             sb.append(ia.getElementAt(i)).append(' ');
  232.         sb.append('\n');
  233.         return sb.toString();
  234.     }
  235.  
  236.     static int[] readArray(Scanner scanner) {
  237.         int n = scanner.nextInt();
  238.         int[] a = new int[n];
  239.         for (int i = 0; i < n; ++i) {
  240.             a[i] = scanner.nextInt();
  241.         }
  242.         return a;
  243.     }
  244.  
  245.  
  246.     static int[] generateRandomArray(int k) {
  247.         Random rnd = new Random(k);
  248.         int n = rnd.nextInt(8) + 2;
  249.         int a[] = new int[n];
  250.         for (int i = 0; i < n; ++i) {
  251.             a[i] = rnd.nextInt(20) - 5;
  252.         }
  253.         return a;
  254.     }
  255.  
  256. }
  257.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement