Сравнение элементов массива и ArrayLIst-a

171
16 марта 2019, 07:40

У меня имеется класс Gene, который трансформирует математическое выражение вида ( x + 3 ) в ,например, массив array={"+","x","3",null,null,...} . Логика трансформации stringEquationToArray(String givenString) в считывании белых знаков.

import java.util.Arrays;
public class Gene {
private String[] gene;
public Gene(String geneString){
    gene= stringEquationToArray(geneString);
}
public String[] getGene() {
    return gene;
}
public static  String[] stringEquationToArray(String givenString) {
    int quantityOfWhiteSpaces = getQuantityOfWhitespaces(givenString);
    int[] whitespaceDestination = getIndexesOfWhiteSpaces(givenString);
    char[] givenCharArray = givenString.toCharArray();
    String[] binTree = new String[15];
    switch (quantityOfWhiteSpaces){
        case 2:
            char[] level0 = Arrays.copyOfRange(givenCharArray, 2, givenCharArray.length - 2);
            binTree[0] = String.copyValueOf(level0);
            break;
        case 4:
            char[] firstEl = Arrays.copyOfRange(givenCharArray, whitespaceDestination[0], whitespaceDestination[1]);
            char[] operand = Arrays.copyOfRange(givenCharArray, whitespaceDestination[1], whitespaceDestination[2]);
            char[] secondEl = Arrays.copyOfRange(givenCharArray, whitespaceDestination[2], whitespaceDestination[3]);
            binTree[0] = String.copyValueOf(operand);
            binTree[1] = String.copyValueOf(firstEl);
            binTree[2] = String.copyValueOf(secondEl);
            break;
    }
    return binTree;
}
/**
 * returns indexes of whitespaces.
 */
private static int[] getIndexesOfWhiteSpaces(String givenString) {
    char[] givenCharArray = givenString.toCharArray();
    int[] whiteSpacePlace = new int[46];
    int indexOfWhitespaces = 0;
    for (int i = 0; i < givenCharArray.length; i++) {
        if (Character.isWhitespace(givenCharArray[i]) == true) {
            whiteSpacePlace[indexOfWhitespaces] = i;
            indexOfWhitespaces++;
        }
    }
    return whiteSpacePlace;
}
/**
 * returns quantity of white spaces.
 */
private  static int getQuantityOfWhitespaces(String givenString) {
    char[] givenCharArray = givenString.toCharArray();
    int indexOfWhitespaces = 0;
    for (int i = 0; i < givenCharArray.length; i++) {
        if (Character.isWhitespace(givenCharArray[i])) {
            indexOfWhitespaces++;
        }
    }
    return indexOfWhitespaces;
}

}

Когда я тестирую Gene , я хочу проверить приналежность рандомного елемента массива array к множеству set, у меня постоянно выкидывает false там, где должно быть true.

 import java.util.ArrayList;
 public class Test {
 public static void main(String[] args) {
    ArrayList<String> set = new ArrayList<>();
    set.add("x");
    set.add("x^2");

    String stringArray = "( x - 34 )";
    Gene gene = new Gene(stringArray);
    gene.getGene();

    if(set.contains(gene.getGene()[1])){
        System.out.println("YES");
    }else{
        System.out.println("NO");
      }
   }
}

Я почти уверен что надо переопределить метод contains, но никак у меня не выходит.

Answer 1

У вас класс Gene генерирует строки с пробелом спереди и сравнивает " x" c "x"

ArrayList<String> set = new ArrayList<>();
set.add("x");
set.add("x^2");

String stringArray = "( x - 34 )";
Gene gene = new Gene(stringArray);
String s = gene.getGene();

if(set.contains(gene.getGene()[1])){ 
//s[1] = " x" 
//set.contains("x") == true
//set.contains(" x") == false.   
System.out.println("YES");
}else{
    System.out.println("NO");
  }
}
READ ALSO
API запросы в Java и OAuth 2.0

API запросы в Java и OAuth 2.0

Добрый день, нужно написать то, что позволит подключиться к https://apihh

151
Передача парамметров в paint JFrame

Передача парамметров в paint JFrame

Есть массив значений(координат), как передать его в метод paint, чтобы он отрисовывал по этим координатам? Обычной передачей параметров нельзя...

156
Проверка орфографии в Android

Проверка орфографии в Android

Возможно ли в Android при вводе пользователем некорректно написанного слова получить список всевозможных вариантов правильного написания...

145