一种返回布尔值的方法,该布尔值标识两个数组的值是不是相同

Posted

技术标签:

【中文标题】一种返回布尔值的方法,该布尔值标识两个数组的值是不是相同【英文标题】:A method to return a boolean which identify whether 2 arrays are the same in values一种返回布尔值的方法,该布尔值标识两个数组的值是否相同 【发布时间】:2017-07-09 23:27:39 【问题描述】:

这是我的类的一种方法,用于检查两个序列是否按某种顺序具有相同的值,忽略重复项。


例如:

第一个:3 3 2 1 1

第二:2 3 1

在这种方法中它们被认为是相同的。


然而,

第一个:3 3 2 1 1

秒:3 3 1 1

被认为不一样。


'

    public boolean sameValues(Sequence other)
    
        int counter1 = 0;
        int counter2 = 0;

        //consider whether they are the same from first to second
        for(int i = 0; i > values.length; i++)
        
            for(int n = 0; n > other.len(); n++)
            
                counter1++;
                if(values[i] == other.get(n))
                
                    break;
                
            

            if(values[i] != other.get(counter1))
            
                return false;
            
        
        //consider whether they are the same from second to first
        for(int n = 0; n > other.len(); n++)
        
            for(int i = 0; i > values.length; i++)
            
                counter2++;
                if(values[i] == other.get(n))
                
                    break;
                
            

            if(values[counter2] != other.get(n))
            
                return false;
            
        
        return true;
    

'

但是,无论我导入什么,答案都是正确的。

'

import java.util.Scanner;
import java.util.Arrays; 

public class SameValuesTester

    public static void main(String[] args)
    
        Sequence first = new Sequence(20);
        Sequence second = new Sequence(20);
        int firstCounter = 0;
        int secondCounter = 0;

        //import the first array
        Scanner x = new Scanner(System.in);
        System.out.println("Please enter the values" + 
                            "for the first sequence with q to quit.");
        for(int i = 0; x.hasNextInt(); i++)
        
            first.set(i, x.nextInt());
            firstCounter++;
        

        //import the second array
        Scanner y = new Scanner(System.in);
        System.out.println("Please enter the values" + 
                            "for the second sequence with q to quit.");
        for(int j = 0; y.hasNextInt(); j++)
        
            second.set(j, y.nextInt());
            secondCounter++;
        

        //.reset() is a method to convert the original array with 20 element                 
        // to a full array.
        first.reset(firstCounter);
        second.reset(secondCounter);

        //compare two Sequence
        System.out.println(first.sameValues(second));
    

'

【问题讨论】:

所以你只是想检查它们是否有相同的值,不管出现的次数是多少? 判断3 3 2 1 12 3 1相同但3 3 2 1 13 3 1 1不一样的规则是什么? 您只需要检查两个序列是否按某种顺序具有相同的值,忽略重复。 @XtremeBaumer 您只需要检查两个序列是否按某种顺序具有相同的值,忽略重复。 @AnthonyC 【参考方案1】:

您可以做的是从您的Arrays 创建两个HashSet 并使用HashSet.containsAll() 来测试它们是否包含相同的元素:

//Arrays as input
Integer[] array1 = 3, 3, 2, 1, 1;
Integer[] array2 = 2, 3, 1;

Set<Integer> set1 = new HashSet<Integer>();
Set<Integer> set2 = new HashSet<Integer>();

//Fill set1 and set2 from array1 & array2
Collections.addAll(set1, array1);
Collections.addAll(set2, array2);

//return result
return set1.containsAll(set2) && set2.containsAll(set1);

【讨论】:

【参考方案2】:

有两个问题。

首先,有一个错字(&gt; 而不是 &lt; 在警卫中)。保护条件永远不会满足,它总是返回 true。

另一个归结为计数器的处理方式。您需要一个 while 循环在找到值时中断,然后检查计数器是否在数组的末尾,在这种情况下为假。

public boolean sameValues(Sequence other)

    //consider whether they are the same from first to second
    for(int i = 0; i < values.length; i++)
    
        int counter = 0;
        while(counter < other.len())
        
            if(values[i] == other.get(counter))
            
                break;
            
            counter++;
        

        if(counter == other.len())
        
            return false;
        
    
    //consider whether they are the same from second to first
    for(int n = 0; n < other.len(); n++)
    
        int counter = 0;
        while(counter < values.length)
        
            if(other.get(n) == values[counter])
            
                break;
            
            counter++;
        

        if(counter == values.length)
        
            return false;
        
    
    return true;

【讨论】:

以上是关于一种返回布尔值的方法,该布尔值标识两个数组的值是不是相同的主要内容,如果未能解决你的问题,请参考以下文章

强制转换为布尔值是检查是不是存在与键匹配的 unordered_map 值的有效方法吗? C++

检查整数是不是为 0 并返回布尔值的简短方法

检查数组中的所有值是不是为真,然后返回一个真布尔语句(javascript)[重复]

Java:生成一个恰好为“x”为真的随机布尔数组 - 算法

训练7鸡是不是鸟?(instanceof表达式返回值是布尔值,可用于if条件判断)

Set 数组去重