Advertisement
Nikolovska

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

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