From 52d4056b0c6b3f83753044e5072bed6a56d37098 Mon Sep 17 00:00:00 2001 From: Nahlane Ghina SAYEH <nahlane-ghina.sayeh@etu.univ-amu.fr> Date: Thu, 26 Sep 2024 00:30:01 +0200 Subject: [PATCH] =?UTF-8?q?Cr=C3=A9ation=20de=20la=20classe=20Vector=20Cr?= =?UTF-8?q?=C3=A9ation=20de=20la=20classe=20Stack=20Exercice=203=20?= =?UTF-8?q?=E2=80=93=20Interfaces?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/AsciiStringFilter.java | 14 ++++ src/main/java/CompositeStringFilter.java | 16 ++++ src/main/java/LowerCaseStringFilter.java | 7 ++ src/main/java/PostfixStringFilter.java | 13 ++++ src/main/java/PrefixStringFilter.java | 13 ++++ src/main/java/Stack.java | 31 ++++---- src/main/java/StringFilter.java | 11 +++ src/main/java/UpperCaseStringFilter.java | 9 +++ src/main/java/Vector.java | 96 ++++++++++++++++-------- 9 files changed, 160 insertions(+), 50 deletions(-) create mode 100644 src/main/java/AsciiStringFilter.java create mode 100644 src/main/java/CompositeStringFilter.java create mode 100644 src/main/java/LowerCaseStringFilter.java create mode 100644 src/main/java/PostfixStringFilter.java create mode 100644 src/main/java/PrefixStringFilter.java create mode 100644 src/main/java/StringFilter.java create mode 100644 src/main/java/UpperCaseStringFilter.java diff --git a/src/main/java/AsciiStringFilter.java b/src/main/java/AsciiStringFilter.java new file mode 100644 index 0000000..ce0a936 --- /dev/null +++ b/src/main/java/AsciiStringFilter.java @@ -0,0 +1,14 @@ +public class AsciiStringFilter implements StringFilter{ + + + @Override + public String filter(String string) { + String filteredString = ""; + for (int i = 0; i < string.length(); i++) { + if(((int)string.charAt(i) < 128)){ + filteredString += string.charAt(i); + } + } + return filteredString; + } +} diff --git a/src/main/java/CompositeStringFilter.java b/src/main/java/CompositeStringFilter.java new file mode 100644 index 0000000..c846437 --- /dev/null +++ b/src/main/java/CompositeStringFilter.java @@ -0,0 +1,16 @@ +public class CompositeStringFilter implements StringFilter{ + + private StringFilter[] filters; + + public CompositeStringFilter(StringFilter[] filters){ + this.filters = filters; + } + + @Override + public String filter(String string) { + for(StringFilter filter : this.filters){ + filter.filter(string); + } + return string; + } +} diff --git a/src/main/java/LowerCaseStringFilter.java b/src/main/java/LowerCaseStringFilter.java new file mode 100644 index 0000000..8d37d0f --- /dev/null +++ b/src/main/java/LowerCaseStringFilter.java @@ -0,0 +1,7 @@ +public class LowerCaseStringFilter implements StringFilter{ + + @Override + public String filter(String string) { + return string.toLowerCase(); + } +} \ No newline at end of file diff --git a/src/main/java/PostfixStringFilter.java b/src/main/java/PostfixStringFilter.java new file mode 100644 index 0000000..2359bd7 --- /dev/null +++ b/src/main/java/PostfixStringFilter.java @@ -0,0 +1,13 @@ +public class PostfixStringFilter implements StringFilter{ + + private int n; + + public PostfixStringFilter(int n) { + this.n = n; + } + + @Override + public String filter(String string) { + return string.substring(string.length() - n, string.length()); + } +} diff --git a/src/main/java/PrefixStringFilter.java b/src/main/java/PrefixStringFilter.java new file mode 100644 index 0000000..02e6dc1 --- /dev/null +++ b/src/main/java/PrefixStringFilter.java @@ -0,0 +1,13 @@ +public class PrefixStringFilter implements StringFilter{ + + private int n; + + public PrefixStringFilter(int n) { + this.n = n; + } + + @Override + public String filter(String string) { + return string.substring(0, n); + } +} diff --git a/src/main/java/Stack.java b/src/main/java/Stack.java index 9eea850..4575bce 100644 --- a/src/main/java/Stack.java +++ b/src/main/java/Stack.java @@ -1,36 +1,31 @@ public class Stack { - private Vector vector; + + Vector vector; public Stack() { - vector = new Vector(10); + this.vector = new Vector(); } public void push(int value) { - vector.add(value); + this.vector.add(value); } public int peek() { - if (vector.isEmpty()) { - throw new IllegalStateException("La pile est vide."); - } - return vector.get(vector.size() - 1); + return this.vector.get(this.vector.size()-1); } - public int pop() { - if (vector.isEmpty()) { - throw new IllegalStateException("La pile est vide."); - } - int value = vector.get(vector.size() - 1); - vector.set(vector.size() - 1, 0); - vector.resize(vector.size() - 1); - return value; + public int pop(){ + int lastElement = this.vector.get(this.vector.size()-1); + this.vector.resize(vector.size()-1); + return lastElement; } public int size() { - return vector.size(); + return this.vector.size(); } - public boolean isEmpty() { - return vector.isEmpty(); + public boolean isEmpty(){ + return this.vector.isEmpty(); } + } diff --git a/src/main/java/StringFilter.java b/src/main/java/StringFilter.java new file mode 100644 index 0000000..5faf9d9 --- /dev/null +++ b/src/main/java/StringFilter.java @@ -0,0 +1,11 @@ +public interface StringFilter { + + String filter(String string); + + static String[] filter(String[] strings, StringFilter filter) { + for(String string : strings) { + filter.filter(string); + } + return strings; + } +} diff --git a/src/main/java/UpperCaseStringFilter.java b/src/main/java/UpperCaseStringFilter.java new file mode 100644 index 0000000..8bfb0cb --- /dev/null +++ b/src/main/java/UpperCaseStringFilter.java @@ -0,0 +1,9 @@ +public class UpperCaseStringFilter implements StringFilter { + + + @Override + public String filter(String string) { + return string.toUpperCase(); + } + +} diff --git a/src/main/java/Vector.java b/src/main/java/Vector.java index 49c7848..902d633 100644 --- a/src/main/java/Vector.java +++ b/src/main/java/Vector.java @@ -1,53 +1,85 @@ +import java.util.Arrays; + +/** + * La classe Vector implémente un tableau d'entiers * de taille dynamique. Les éléments du + * vecteur sont stockés dans un tableau. * La taille de ce tableau est au minimum doublée + * à chaque fois qu'il est * nécessaire de le faire grossir. + */ public class Vector { - private int[] array; + + /** + * Tableau permettant de stocker les éléments du vecteur. + * Seuls les size premiers éléments font partie du vecteur. + * La taille de ce tableau est égale à la capacité du vecteur, c'est-à-dire, + * au nombre d'éléments maximum que le vecteur peut contenir sans + * avoir besoin d'allouer un nouveau tableau. + */ + private int[] elements; + + /** + * Nombre d'éléments présents dans le vecteur. + */ private int size; + /** + * Construit un vecteur de capacité initiale initialCapacity. + * + * @param initialCapacity Capacité initiale du vecteur + */ public Vector(int initialCapacity) { - array = new int[initialCapacity]; + elements = new int[initialCapacity]; size = 0; } - public void ensureCapacity(int capacity) { - if (array.length < capacity) { - int newCapacity = Math.max(capacity, 2 * array.length); - int[] newArray = new int[newCapacity]; - System.arraycopy(array, 0, newArray, 0, size); - array = newArray; - } + public Vector() { + this(10); + } + + /** + * Augmente la capacité du vecteur si nécessaire de façon + * à permettre le stockage d'au moins <code>minCapacity</code> + * éléments. S'il est nécessaire d'augmenter la capacité du vecteur, + * elle est au minimum doublée. + * + * @param minCapacity Capacité minimale à assurer + */ + public void ensureCapacity(int minCapacity) { + int oldCapacity = elements.length; + if (oldCapacity >= minCapacity) return; + int newCapacity = Math.max(oldCapacity * 2, minCapacity); + elements = Arrays.copyOf(elements, newCapacity); } public void resize(int newSize) { ensureCapacity(newSize); - for (int i = size; i < newSize; i++) { - array[i] = 0; - } - size = newSize; + this.size = newSize; } - public int size() { - return size; + /** + * Retourne la capacité du vecteur. + * + * @return Capacité du vecteur. + */ + public int capacity() { + return elements.length; } - public boolean isEmpty() { - return size == 0; - } + public int size() { return this.size; } - public void add(int value) { - ensureCapacity(size + 1); - array[size] = value; - size++; + public boolean isEmpty() { return this.size == 0; } + + public void add(int element) { + int lastIndex = size; + this.resize(size+1); + this.elements[lastIndex] = element; } - public void set(int index, int value) { - if (index >= 0 && index < size) { - array[index] = value; - } + public void set(int index, int element) { + if(this.size < index + 1) return; + this.elements[index] = element; } public int get(int index) { - if (index >= 0 && index < size) { - return array[index]; - } - return 0; - } -} + if(this.size<index+1) return 0; + return this.elements[index]; } +} \ No newline at end of file -- GitLab