Есть ли простой способ написать метод, который возвращает логическое И логических элементов, содержащихся в связанном списке? - PullRequest
0 голосов
/ 22 января 2020

У меня есть связанный список из n логических элементов, и я должен написать метод, который возвращает логическое И этих элементов.

public class Element{

boolean bool;
Element next;

public Element(boolean bool, Element next){
    this.bool=bool;
    this.next=next;
}

}

public class List{

Random rand= new Random();
Element e=null;

public List(int n){       
    for(int i=0; i<n; i++){ 
        e= new Element(rand.nextBoolean(),e);

    }    
}

Я думал о создании массив, l oop через список, заполнить массив логическими значениями AND, а затем вернуть массив. Честно говоря, я не думаю, что это было бы хорошим решением по разным причинам. Могу ли я сделать это без массивов?

Ответы [ 3 ]

1 голос
/ 22 января 2020

Просто используйте Java LinkedList и contains:

LinkedList<Boolean> myList = new LinkedList<>();

// add a bunch of true's
myList.add(true);
myList.add(true);
myList.add(true);
myList.add(true);

System.out.println("logicalAND="+!myList.contains(false));

// add a false
myList.add(false);
System.out.println("logicalAND="+!myList.contains(false));

отпечатки

logicalAND=true
logicalAND=false

Если ваш элемент списка более сложный, но все еще должен разрешить равенство на логическое значение, затем обязательно обновите его equals метод.

0 голосов
/ 22 января 2020

Вы можете использовать рекурсию и написать метод в своем классе Element следующим образом:

boolean andAll() {
    return (next!=null) ? bool && next.andAll() : bool;
}

Если bool имеет значение false, Java не будет оценивать часть в левой части этого выражения. Вы можете написать интерфейсный метод в своем классе списка для вызова этого метода в вашем первом элементе списка.

Если ваша цель не создает новую реализацию связанного списка, вы должны использовать LinkedList, предоставленный Java и он содержит метод.

Привет

0 голосов
/ 22 января 2020

Простите, если я неправильно понял вопрос здесь, но если вы пытаетесь получить логическое значение и целый кусок, разве это не правда, если все верно, иначе ложь?

Вот какой-то смутный код моего мышления

boolean value=true;
for(int i=0;i<n;i++){ //traverse the nodes
    if( /*Value at the node you're at*/==false )
        value=false;
}
return value;
...