Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我如何做我的家庭作业与数组,函数和二进制搜索?_Java_Arrays_Function - Fatal编程技术网

Java 我如何做我的家庭作业与数组,函数和二进制搜索?

Java 我如何做我的家庭作业与数组,函数和二进制搜索?,java,arrays,function,Java,Arrays,Function,所以基本上我想做的是一个程序,询问用户他希望他的数组有多大,并让用户在数组中引入值。然后我希望用户能够引入一个数字,让程序确定该数字在哪个数组中,或者确定它不存在。下面的程序当前随机生成数组的值,用户介绍他想要使用多少数组元素。但我不知道如何把这和我之前解释的联系起来 package laboratorio9; import java.util.Random; import java.util.Arrays; public class ArregloBinario { private

所以基本上我想做的是一个程序,询问用户他希望他的数组有多大,并让用户在数组中引入值。然后我希望用户能够引入一个数字,让程序确定该数字在哪个数组中,或者确定它不存在。下面的程序当前随机生成数组的值,用户介绍他想要使用多少数组元素。但我不知道如何把这和我之前解释的联系起来

package laboratorio9;

import java.util.Random;
import java.util.Arrays;

public class ArregloBinario
{
    private int[] datos;
    private static Random generador = new Random();

    public ArregloBinario (int tamanio)
    {
        datos = new int[tamanio];

        for (int i=0; i<tamanio; i++)
            datos[i] = 10 + generador.nextInt(90);

        Arrays.sort(datos);
    }

    public int busquedaBinaria(int elementoBusqueda)
    {
        int inferior = 0;
        int superior = datos.length-1;
        int medio = (inferior + superior + 1 ) / 2;
        int ubicacion = -1;

        // **HOW CAN I CHANGE THE FOLLOWING NTO A RECURSIVE FUNCTION>**
        do 
        {
            System.out.print(elementosRestantes(inferior,superior));

            for (int i = 0; i<medio; i++)
                System.out.print("  ");
            System.out.println(" * ");

            if (elementoBusqueda == datos[medio])
                ubicacion=medio;
            else if (elementoBusqueda<datos[medio])
                superior = medio-1;
            else 
                inferior = medio+1;

            medio = (inferior + superior + 1) / 2;
        } while ((inferior <=superior) && (ubicacion == -1));
        return ubicacion;                
    }

    public String elementosRestantes(int inferior, int superior)
    {
        StringBuilder temporal = new StringBuilder();

        for (int i = 0; i < inferior; i++)
            temporal.append( "  " );

        for (int i = inferior; i <= superior; i++)
            temporal.append( datos[i] + " ");

        temporal.append("\n");
        return temporal.toString();
    }

    public String toString()
    {
        return elementosRestantes(0, datos.length-1);
    }
}

// MAIN CLASS //

package laboratorio9;

import java.util.Scanner;

public class PruebaBusquedaBinaria {
    public static void main(String[] args)
    {
        Scanner entrada = new Scanner(System.in);

        int enteroABuscar;
        int posicion;

        System.out.println("Please write the number of elements in the array.");
        int number = entrada.nextInt();

        ArregloBinario arregloBusqueda = new ArregloBinario(number);
        System.out.println(arregloBusqueda);

        System.out.print("Write a value (-1) to go out: ");
        enteroABuscar = entrada.nextInt();
        System.out.println();

        while (enteroABuscar != -1)
        {
            posicion = arregloBusqueda.busquedaBinaria(enteroABuscar);

            if (posicion==-1)
                System.out.println("The value " + enteroABuscar + " was not found.\n");
            else
                System.out.println("The value " + enteroABuscar +
                        " was found in position " + posicion + ".\n");

            System.out.print(
                    "Write a number (-1 to go out): ");
            enteroABuscar = entrada.nextInt();
            System.out.println();
        }
    }
}
包装实验室9;
导入java.util.Random;
导入java.util.array;
公开课
{
私人int[]datos;
private static Random generador=new Random();
公共区域(塔马尼奥国际)
{
达托斯=新国际[塔马尼奥];
对于(int i=0;i**
做
{
系统输出打印(elementosRestantes(低级、高级));
对于(inti=0;i
import java.util.Scanner;
导入java.util.array;
公共类测试员
{
公共静态void main(字符串[]args)
{
int randomNums[];
Scanner myScanner=新扫描仪(System.in);
int len=myScanner.nextInt();
//创建长度由输入决定的数组
randomNums=新整数[len];
//用随机数填充数组
对于(整数y=0;y排序[中间]){
返回rBinarySearch(已排序,中间+1,最多,键);
}否则{
return mid;//找到了。
}
}
return-(first+1);//找不到密钥
}
}

首先,这里是原始的ArregloBinario类,其间距固定:

package laboratorio9;

import java.util.Random;
import java.util.Arrays;

public class ArregloBinario
{
    private int[] datos;
    private static Random generador = new Random();

    public ArregloBinario (int tamanio)
    {
        datos = new int[tamanio];

        for (int i=0; i<tamanio; i++)
            datos[i] = 10 + generador.nextInt(90);

        Arrays.sort(datos);
    }

    public int busquedaBinaria(int elementoBusqueda)
    {
        int inferior = 0;
        int superior = datos.length-1;
        int medio = (inferior + superior + 1 ) / 2;
        int ubicacion = -1;

        // **HOW CAN I CHANGE THE FOLLOWING NTO A RECURSIVE FUNCTION>**
        do 
        {
            System.out.print(elementosRestantes(inferior,superior));

            for (int i = 0; i<medio; i++)
                System.out.print("   ");
            System.out.println(" * ");

            if (elementoBusqueda == datos[medio])
                ubicacion=medio;
            else if (elementoBusqueda<datos[medio])
                superior = medio-1;
            else 
                inferior = medio+1;

            medio = (inferior + superior + 1) / 2;
        } while ((inferior <=superior) && (ubicacion == -1));
        return ubicacion;                
    }

    public String elementosRestantes(int inferior, int superior)
    {
        StringBuilder temporal = new StringBuilder();

        for (int i = 0; i < inferior; i++)
            temporal.append( "   " );

        for (int i = inferior; i <= superior; i++)
            temporal.append( datos[i] + " ");

        temporal.append("\n");
        return temporal.toString();
    }

    public String toString()
    {
        return elementosRestantes(0, datos.length-1);
    }
}

你想做什么?我们不会只是帮你做家庭作业……你最好问一下“我无法让我尝试做的事情发挥作用?并向我们展示您尝试使用的代码。我只想澄清几个问题:您希望用户如何提供值?目的是创建递归搜索而不是循环搜索吗?您上面提到的是“迭代搜索”二进制搜索。谷歌上有很多资源将迭代搜索与递归二进制搜索进行比较——去看看,尝试替换do/while循环,然后发布你的想法。如果你仍然需要帮助,每个人都会参与。明白吗?
package laboratorio9;

import java.util.Random;
import java.util.Arrays;

public class ArregloBinario
{
    private int[] datos;
    private static Random generador = new Random();

    public ArregloBinario (int tamanio)
    {
        datos = new int[tamanio];

        for (int i=0; i<tamanio; i++)
            datos[i] = 10 + generador.nextInt(90);

        Arrays.sort(datos);
    }

    public int busquedaBinaria(int elementoBusqueda)
    {
        int inferior = 0;
        int superior = datos.length-1;
        int medio = (inferior + superior + 1 ) / 2;
        int ubicacion = -1;

        // **HOW CAN I CHANGE THE FOLLOWING NTO A RECURSIVE FUNCTION>**
        do 
        {
            System.out.print(elementosRestantes(inferior,superior));

            for (int i = 0; i<medio; i++)
                System.out.print("   ");
            System.out.println(" * ");

            if (elementoBusqueda == datos[medio])
                ubicacion=medio;
            else if (elementoBusqueda<datos[medio])
                superior = medio-1;
            else 
                inferior = medio+1;

            medio = (inferior + superior + 1) / 2;
        } while ((inferior <=superior) && (ubicacion == -1));
        return ubicacion;                
    }

    public String elementosRestantes(int inferior, int superior)
    {
        StringBuilder temporal = new StringBuilder();

        for (int i = 0; i < inferior; i++)
            temporal.append( "   " );

        for (int i = inferior; i <= superior; i++)
            temporal.append( datos[i] + " ");

        temporal.append("\n");
        return temporal.toString();
    }

    public String toString()
    {
        return elementosRestantes(0, datos.length-1);
    }
}
package laboratorio9;

import java.util.Random;
import java.util.Arrays;

public class ArregloBinario
{
    private int[] datos;
    private static Random generador = new Random();

    public ArregloBinario (int tamanio)
    {
        datos = new int[tamanio];

        for (int i=0; i<tamanio; i++)
            datos[i] = 10 + generador.nextInt(90);

        Arrays.sort(datos);
    }

    private int recursive (int elem, int inf, int sup, int med) {
        System.out.print(elementosRestantes(inf,sup));

        for (int i = 0; i<med; i++)
            System.out.print("   ");
        System.out.println(" * ");

        if (inf > sup)
            return -1;

        if (elem == datos[med])
            return med;

        if (elem<datos[med])
            return recursive (elem,inf,med-1,(inf + med) / 2);

    return recursive (elem,med+1,sup,(med + sup + 2) / 2);
    }

    public int busquedaBinaria(int elementoBusqueda)
    {
        int inf = 0;
        int sup = datos.length-1;
        int med = (inf + sup + 1 ) / 2;
        int ubi = -1;

        return recursive (elementoBusqueda,inf,sup,med);
    }

    public String elementosRestantes(int inferior, int superior)
    {
        StringBuilder temporal = new StringBuilder();

        for (int i = 0; i < inferior; i++)
            temporal.append( "   " );

        for (int i = inferior; i <= superior; i++)
            temporal.append( datos[i] + " ");

        temporal.append("\n");
        return temporal.toString();
    }

    public String toString()
    {
        return elementosRestantes(0, datos.length-1);
    }
}
Please write the number of elements in the array.
20
14 18 19 20 22 31 43 50 55 58 58 59 62 71 72 74 85 92 95 98 

Write a value (-1) to go out: 95
14 18 19 20 22 31 43 50 55 58 58 59 62 71 72 74 85 92 95 98 
                               * 
                                 59 62 71 72 74 85 92 95 98 
                                              * 
                                                85 92 95 98 
                                                       * 
The value 95 was found in position 18.

Write a number (-1 to go out): -1