束在数组Java的元素

时间:2017-05-21 22:13:56

标签: java arrays loops

我需要一些帮助来计算数组中相邻元素的数量。

假设我有4个整数数组。

myArray = {1, 1, 1, 1}
myArray2 = {5, 6, 7, 8, 7, 1, 10, 11, 12};
myArray3 = {5, 6, 7, 7, 8, 1, 10, 11, 12};
myArray4 = {5, 6, 7, 7, 8, 1, 10, 11, 11, 11, 12};

我想计算这些数组中元素的数量。

期望的输出应该是:

myArray => 1 (1 bunch of adjacent element "1")
myArray2 => 0 (no adjacent element)
myArray3 => 1 (1 bunch of adjacent  element "7")
myArray4 => 2 (2 bunches of adjacent elements "7" and "11")

我可以计算相邻元素,但不计算束数。

以下是我写的代码:

import acm.program.ConsoleProgram;

public class project extends ConsoleProgram{
    public void run ()
    {
        int[] myArray = {1, 1, 1, 1};
        int[] myArray2 = {5, 6, 7, 8, 7, 1, 10, 11, 12};
        int[] myArray3 = {5, 6, 7, 7, 8, 1, 10, 11, 12};
        int[] myArray4 = {5, 6, 7, 7, 8, 1, 10, 11, 11, 11, 12};        

        println("myArray -> " + countBunches(myArray));
        println("myArray2 -> " + countBunches(myArray2));
        println("myArray3 -> " + countBunches(myArray3));
    }

    public int countBunches(int[] myArray)
    {   
        int count = 0;
        int saveIndex;
        int saveContent;

        for(int i = 0; i<myArray.length; i++)
        {
            if(i == 0)
            {
                saveContent = myArray[i];
            }
            else
            {
                saveContent = myArray[i-1];
                if(saveContent == myArray[i])
                {

                    saveContent = myArray[i];
                    saveIndex = i;
                    count++;
                    println(myArray[saveIndex] + " repatingb" + saveIndex + ". element");
                }
                else
                {
                    saveContent = myArray[i];
                }
            }
        }   

        return(count);
    }
}

3 个答案:

答案 0 :(得分:1)

我不想做作业,但让我们看看。

采用什么方法?

  • 你有一堆数,并走了数组
  • 要么有一堆正在进行中
  • 如果当前元素是先前元素,那么它取决于是否已经束缚。

这或多或少是你的方法。

或者你也可以检查一下它是否是一堆(内部循环)的开头并且在一堆之后设置i。

使用明确的变量:

   public int countBunches(int[] numbers)

答案 1 :(得分:1)

问题在于,每次元素与最后一个元素匹配时,您都在计算。因此,如果连续有3个相同的项目,则计为2,而不是1。

一种方法是跟踪最后一项以及是否匹配:

public int countBunches(int[] myArray)
{   
    int count = 0;
    int lastItem;
    boolean lastItemMatched;

    for(int i = 0; i<myArray.length; i++)
    {
        if(i == 0)
        {
            lastItem = myArray[0];
            lastItemMatched = false;
        }
        else
        {
            if(lastItem == myArray[i])
            {
                if(!lastItemMatched)
                {
                    count++;
                }

                lastItemMatched = true;
            } else {
                lastItemMatched = false;
            }

            lastItem = myArray[i];
        }
    }   

    return count;
}

答案 2 :(得分:0)

这是一个很简单的方法:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath, object: PFObject?) -> PFTableViewCell? {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cells", for: indexPath as IndexPath) as! MyCell
    cell.object = object
    let currentLocation = CLLocation()
    locManager.distanceFilter = 50
    if( CLLocationManager.authorizationStatus() == CLAuthorizationStatus.authorizedWhenInUse ||
        CLLocationManager.authorizationStatus() == CLAuthorizationStatus.authorizedAlways){
        let coordinate₀ = CLLocation(latitude: CLLocationDegrees(-41)!, longitude: CLLocationDegrees(52.3)!)
        let coordinate₁ = CLLocation(latitude: currentLocation.coordinate.longitude, longitude: currentLocation.coordinate.latitude)
        let distanceInMeters = coordinate₀.distance(from: coordinate₁)
        if(distanceInMeters <= 1609)
        {
            cell.Distance.text = "\(Float(round(distanceInMeters * 3.28084)).cleanValue) ft"
        }
        else
        {
            cell.Distance.text = "\(Float(round(distanceInMeters / 1609)).cleanValue) mi"
        }
    }
}

在这种方法中,我们跟踪前一个数字(这就是我使用Integer的原因,以便能够确定是否存在先前的数字并依赖于null)。

一个技巧是在内循环中遍历相同数字的整个序列。