[WikiDyd] [TitleIndex] [WordIndex

Języki i metodyka programowania 2

Wykłady z wiosny 2011: W5 (9 maja) - W8 ()

W9: 9 maja 2011

Rozmawialiśmy o programowaniu wielowątkowym w Javie: jwatki.pdf

W10: 16 maja 2011

Pisaliśmy kartkówkę - trzeba było napisac klasę przechowującą wektor rzadki i realizującą interfejs (bez metody add):

   1 public interface VectorInterface {
   2     public int getLength();
   3     public void setlength( int n );
   4     public double get( int i) throws ArrayIndexOutOfBoundsException;
   5     public void set( int i, double value )throws ArrayIndexOutOfBoundsException;
   6     public void add( VectorInterface other );
   7 }

Przykładowe rozwiązanie (nadmiarowe przez metodę add i metodę main, które nie były wymagane):

   1 import java.util.HashMap;
   2 import java.util.Map;
   3 import java.util.Random;
   4 
   5 /**
   6  *
   7  * @author jstar
   8  */
   9 public class SparseVec implements VectorInterface {
  10 
  11     private int n;
  12     private Map<Integer, Double> v;
  13 
  14     public SparseVec(int n) {
  15         this.n = n;
  16         v = new HashMap<Integer, Double>();
  17     }
  18 
  19     public int getLength() {
  20         return n;
  21     }
  22 
  23     public void setlength(int n) {
  24         this.n = n;
  25         checkAndClearMap();
  26     }
  27 
  28     public double get(int i) throws ArrayIndexOutOfBoundsException {
  29         if (i < 0 || i >= n) {
  30             throw new ArrayIndexOutOfBoundsException("Index " + i + " is outside allowed range: <" + 0 + ";" + n + ">");
  31         }
  32         if (v.containsKey(i)) {
  33             return v.get(i);
  34         } else {
  35             return 0.0;
  36         }
  37     }
  38 
  39     public void set(int i, double value) throws ArrayIndexOutOfBoundsException {
  40         if (i < 0 || i >= n) {
  41             throw new ArrayIndexOutOfBoundsException("Index " + i + " is outside allowed range: <" + 0 + ";" + n + ">");
  42         }
  43         v.put(i, value);
  44     }
  45 
  46     private void checkAndClearMap() {
  47         for (Integer i : v.keySet()) {
  48             if (i >= n) {
  49                 v.remove(i);
  50             }
  51         }
  52     }
  53 
  54     public void add(VectorInterface other) {
  55         if (other.getLength() > n) {
  56             setlength(other.getLength());
  57         }
  58         for (int i = 0; i < n; i++) {
  59             double me = get(i);
  60             double he = other.get(i);
  61             if (me != 0.0 || he != 0.0) {
  62                 v.put(i, me + he);
  63             }
  64         }
  65     }
  66 
  67     public static void main(String[] args) {
  68         VectorInterface v = new SparseVec(args.length > 0 ? Integer.parseInt(args[0]) : 100);
  69         int m = args.length > 1 ? Integer.parseInt(args[1]) : 10;
  70 
  71         Random gen = new Random(v.getLength() % m);
  72         for (int i = 0; i < m; i++) {
  73             int index = gen.nextInt(v.getLength());
  74             v.set(index, 1.0);
  75         }
  76         try {
  77             v.set(v.getLength(), 10);
  78             System.err.println("Method SparseVec.set failed to throw an exception!");
  79         } catch (IndexOutOfBoundsException ex) {
  80             // it's ok
  81         }
  82         System.out.print("[");
  83         for (int i = 0; i < v.getLength(); i++) {
  84             System.out.print(" " + v.get(i));
  85         }
  86         System.out.println(" ]");
  87         v.add(v);
  88         System.out.print("[");
  89         for (int i = 0; i < v.getLength(); i++) {
  90             System.out.print(" " + v.get(i));
  91         }
  92         System.out.println(" ]");
  93         VectorInterface u = new SparseVec(2 * v.getLength());
  94         u.set(v.getLength() + 2, 10.0);
  95         v.add( u );
  96         System.out.print("[");
  97         for (int i = 0; i < v.getLength(); i++) {
  98             System.out.print(" " + v.get(i));
  99         }
 100         System.out.println(" ]");
 101     }
 102 }

Kolejny temat to ocena i testowanie kodu. O metodach oceny tylko wspomnieliśmy, natomiast skupiliśmy się na wykorzystaniu narzędzi testowania jednostkowego ze szczególnym uzględnieniem bibliotek JUnit: ocenaITestowanieKodu.pdf


2015-09-23 06:44