有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何打印出循环发生的次数?

我试图确定线性和二进制搜索技术的比较次数。有人能告诉我如何打印出每种情况下循环发生的次数吗?例如,要在第一个数组中找到5,循环只发生一次

       public static void main(String[] args) {
    // TODO code application logic here
    int[] values  = {5, 8, 6, 2, 1, 7, 9, 3, 0, 4, 20, 50, 11, 22, 32, 120};
    int[] valuesSorted  = {1, 2, 3, 4, 5, 8, 16, 32, 51, 57, 59, 83, 90, 104};
    DisplayArray(values);
    DisplayArray(valuesSorted);

    int index;
    index = IndexOf(1, values);
    System.out.println("1 is at values location " + index);
    index = IndexOf(120, values);

    System.out.println("120 is at values location " + index);

    index = BinaryIndexOf(104, valuesSorted);
    System.out.println("104 is at values Sorted location " + index);

    index = BinaryIndexOf(90, valuesSorted);
    System.out.println("90 is at values Sorted location " + index);       

}


public static int IndexOf(int value, int[] array)
{

    for (int i=0; i < array.length; i++)
    {

        if(array[i] == value)
            return i;

    }

    return -1;


}
public static int BinaryIndexOf(int value, int [] array)
{
    int start = 0;
    int end = array.length -1;
    int middle;

    while (end >= start)
    {
        middle = (start + end ) /2;
        if (array[middle]== value)
            return middle;
        if (array[middle]< value)
            start = middle + 1;
        else 
            end = middle - 1;
    }
    return -1;

}

public static void DisplayArray(int[] array)
{
    for (int a : array)
    {
        System.out.print(a + " ");
    }
    System.out.println();
}

}


共 (2) 个答案

  1. # 1 楼答案

    对于线性搜索,可以执行以下操作:

    public static int IndexOf(int value, int[] array)
    {
        for (int i=0; i < array.length; i++)
        {
    
            if(array[i] == value)
            {            
                System.out.println("Linear search: Number of comparisons = " + (i + 1));
                return i;
            }
        }
    
        return -1;
    }
    

    对于二进制搜索,请执行以下操作:

    public static int BinaryIndexOf(int value, int [] array)
    {
        int start = 0;
        int end = array.length -1;
        int middle;
        int loopCount = 0;
        while (end >= start)
        {
            loopCount++;
            middle = (start + end ) /2;
            if (array[middle]== value)
            {
                System.out.println("Binary search: Number of times looped = " + loopCount); 
                return middle;
            }
            if (array[middle]< value)
                start = middle + 1;
            else 
                end = middle - 1;
        }
        System.out.println("Binary search: Number of times looped = " + loopCount);
        return -1;
    
    }
    
  2. # 2 楼答案

    一种简单的方法是在类中创建一个计数器变量,并根据需要对其进行操作,如下所示:

    private static int _loopCounter;
    
    public static void main(String[] args) {
        // TODO code application logic here
        int[] values  = {5, 8, 6, 2, 1, 7, 9, 3, 0, 4, 20, 50, 11, 22, 32, 120};
        int[] valuesSorted  = {1, 2, 3, 4, 5, 8, 16, 32, 51, 57, 59, 83, 90, 104};
        DisplayArray(values);
        DisplayArray(valuesSorted);
    
        _loopCounter = 0;
        int index;
        index = IndexOf(1, values);
        System.out.println("1 is at values location " + index);
        System.out.println(_loopCounter + " comparisons were made.")
    
        _loopCounter = 0;
        index = IndexOf(120, values);
        System.out.println("120 is at values location " + index);
        System.out.println(_loopCounter + " comparisons were made.")
    
        _loopCounter = 0;
        index = BinaryIndexOf(104, valuesSorted);
        System.out.println("104 is at values Sorted location " + index);
        System.out.println(_loopCounter + " comparisons were made.")
    
        _loopCounter = 0;
        index = BinaryIndexOf(90, valuesSorted);
        System.out.println("90 is at values Sorted location " + index);
        System.out.println(_loopCounter + " comparisons were made.")       
    }
    
    
    public static int IndexOf(int value, int[] array)
    {
        for (int i=0; i < array.length; i++)
        {
            _loopCounter++;
            if(array[i] == value)
                return i;
        }
        return -1;
    }
        public static int BinaryIndexOf(int value, int [] array)
        {
        int start = 0;
        int end = array.length -1;
        int middle;
    
        while (end >= start)
        {
            _loopCounter++;
            middle = (start + end ) /2;
            if (array[middle]== value)
                return middle;
            if (array[middle]< value)
                start = middle + 1;
            else 
                end = middle - 1;
        }
        return -1;
    }
    
    public static void DisplayArray(int[] array)
    {  
        for (int a : array)
        {
            System.out.print(a + " ");
        }
        System.out.println();
    }
    

    我没有测试这段代码,但我敢打赌你可以根据自己的需要修改它