Skip to content

Commit 02480f0

Browse files
committed
cohort 42.1 hw #19 & interpreter
1 parent d4c6e0e commit 02480f0

File tree

4 files changed

+172
-46
lines changed

4 files changed

+172
-46
lines changed

BerlinAIT/Cohort42.1/src/extend/Interpreter.java

Lines changed: 7 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,12 @@
66
* AIT-TR, cohort 42.1, Java Basic, hw #10 ext
77
*
88
* @author Sergey Iryupin
9-
* @version 8,23-Feb-24
9+
* @version 8,23,26,28-Feb-24
1010
*/
1111
public class Interpreter {
1212

13-
static int[] values = new int[26];
14-
1513
public static void main(String[] args) {
14+
Variables variables = new Variables();
1615
Scanner scanner = new Scanner(System.in);
1716
String line;
1817
do {
@@ -21,55 +20,17 @@ public static void main(String[] args) {
2120
String[] tokens = line.split(" ");
2221
switch (tokens[0]) {
2322
case "print":
24-
printValue(tokens[1]);
23+
Integer value = variables.getValue(tokens[1]);
24+
if (value != null) {
25+
System.out.println(value);
26+
}
2527
break;
2628
case "exit":
2729
System.out.println("Exit from interpreter.");
2830
break;
2931
default:
30-
assignValue(line);
32+
variables.assignValue(line);
3133
}
3234
} while (!line.equals("exit"));
3335
}
34-
35-
static void assignValue(String line) {
36-
String[] tokens = line.split("=");
37-
String varName = tokens[0].trim();
38-
String varValue = tokens[1].trim();
39-
// check variable name
40-
if (!validateVarName(varName)) {
41-
return;
42-
}
43-
// transform 'a' -> 0
44-
int idx = varName.charAt(0) - 'a';
45-
// transform "123" -> 123
46-
int value = Integer.valueOf(varValue);
47-
// assign value
48-
values[idx] = value;
49-
}
50-
51-
static void printValue(String varName) {
52-
// check variable name
53-
if (!validateVarName(varName)) {
54-
return;
55-
}
56-
// transform 'a' -> 0
57-
int idx = varName.charAt(0) - 'a';
58-
// print value of variable
59-
System.out.println(values[idx]);
60-
}
61-
62-
static boolean validateVarName(String varName) {
63-
// check variable name length
64-
if (varName.length() > 1) {
65-
System.out.println("Error: variable name is too long");
66-
return false;
67-
}
68-
if (varName.isEmpty()) {
69-
System.out.println("Error: variable name is empty");
70-
return false;
71-
}
72-
// TODO check if variable name in 'a'..'z'
73-
return true;
74-
}
7536
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package extend;
2+
3+
public class Variables {
4+
private int[] values = new int[26];
5+
6+
public Integer getValue(String varName) {
7+
// check variable name
8+
if (!validateVarName(varName)) {
9+
return null;
10+
}
11+
// transform 'a' -> 0
12+
int idx = varName.charAt(0) - 'a';
13+
return values[idx];
14+
}
15+
16+
public void assignValue(String line) {
17+
String[] tokens = line.split("=");
18+
String varName = tokens[0].trim();
19+
// if right side from '=' is not empty
20+
if (tokens.length == 1) {
21+
System.out.println("Error: invalid command");
22+
return;
23+
}
24+
String varValue = tokens[1].trim();
25+
// check variable name
26+
if (!validateVarName(varName)) {
27+
return;
28+
}
29+
// transform 'a' -> 0
30+
int idx = varName.charAt(0) - 'a';
31+
// transform "123" -> 123
32+
int value = Integer.valueOf(varValue);
33+
// assign value
34+
values[idx] = value;
35+
}
36+
37+
private boolean validateVarName(String varName) {
38+
// check variable name length
39+
if (varName.length() > 1) {
40+
System.out.println("Error: variable name is too long");
41+
return false;
42+
}
43+
if (varName.isEmpty()) {
44+
System.out.println("Error: variable name is empty");
45+
return false;
46+
}
47+
// check if variable name is in 'a'..'z'
48+
if (varName.charAt(0) < 'a' || varName.charAt(0) > 'z') {
49+
System.out.println("Error: variable name is invalid");
50+
return false;
51+
}
52+
return true;
53+
}
54+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package lesson19.homework;
2+
3+
/**
4+
* AIT-TR, cohort 42.1, Java Basic, hw #19
5+
*
6+
* @author Sergey Iryupin
7+
* @version 28-Feb-24
8+
*/
9+
public class HomeWork19 {
10+
public static void main(String[] args) {
11+
RubberArray rb = new RubberArray();
12+
rb.add(8);
13+
rb.add(4);
14+
rb.add(3);
15+
rb.add(2);
16+
rb.add(1);
17+
System.out.println(rb);
18+
System.out.println(rb.contains(12));
19+
System.out.println(rb.indexOf(12));
20+
System.out.println(rb.indexOf(5));
21+
rb.add(-3, 3);
22+
System.out.println(rb);
23+
}
24+
}
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package lesson19.homework;
2+
3+
import java.util.Arrays;
4+
5+
public class RubberArray {
6+
7+
private final int INIT_DATA_SIZE = 10;
8+
private final float EXTEND_INDEX = 1.5f;
9+
private int[] data;
10+
private int length;
11+
12+
public RubberArray() {
13+
data = new int[INIT_DATA_SIZE];
14+
length = 0;
15+
}
16+
17+
public int get(int idx) {
18+
return data[idx];
19+
}
20+
21+
private void extendArrayIfNeed() {
22+
if (length == data.length) {
23+
// create new array, length * EXTEND_INDEX
24+
int[] newData = new int[(int) (data.length * EXTEND_INDEX)];
25+
// move all items to new array
26+
for (int i = 0; i < data.length; i++) {
27+
newData[i] = data[i];
28+
}
29+
// change link to new array
30+
data = newData;
31+
}
32+
}
33+
34+
public void add(int value) {
35+
extendArrayIfNeed();
36+
// add value
37+
data[length] = value;
38+
length++;
39+
}
40+
41+
public void add(int value, int idx) {
42+
extendArrayIfNeed();
43+
// insert value
44+
// 0;1;2;3;4;5
45+
// 8,4,3,2,1,1 -> i == 5
46+
// 8,4,3,2,2,1 -> i == 4
47+
for (int i = length; i > idx; i--) {
48+
data[i] = data[i - 1];
49+
}
50+
System.out.println(Arrays.toString(data));
51+
data[idx] = value;
52+
length++;
53+
}
54+
55+
public void remove(int idx) {
56+
// move elements right to left from idx
57+
for (int i = idx; i < data.length - 1; i++) {
58+
data[i] = data[i + 1];
59+
}
60+
length--;
61+
}
62+
63+
public boolean contains(int value) {
64+
return indexOf(value) != -1;
65+
}
66+
67+
public int indexOf(int value) {
68+
for (int i = 0; i < length; i++) {
69+
if (data[i] == value) {
70+
return i;
71+
}
72+
}
73+
return -1;
74+
}
75+
76+
@Override
77+
public String toString() {
78+
StringBuilder sb = new StringBuilder("[");
79+
for (int i = 0; i < length; i++) {
80+
sb.append(data[i]);
81+
if (i < length - 1) {
82+
sb.append(", ");
83+
}
84+
}
85+
return sb.append("]").toString();
86+
}
87+
}

0 commit comments

Comments
 (0)