Java 我声明的数组大小是否与我的搜索相关联?

Java 我声明的数组大小是否与我的搜索相关联?,java,arrays,search,Java,Arrays,Search,我有一个利用SwingGUI和新的排序算法和搜索的程序。我的分类工作正常,但是当我尝试搜索数字时,我让它给出一条消息,不管它是否被找到。然而,当这个数字存在时,它说它找到了,它说它没有找到。出于某种原因,它只说在索引4中找到了0 static int Numbers[]=new int[0]; private static class ButtonHandler implements ActionListener { public void actionPerformed(Acti

我有一个利用SwingGUI和新的排序算法和搜索的程序。我的分类工作正常,但是当我尝试搜索数字时,我让它给出一条消息,不管它是否被找到。然而,当这个数字存在时,它说它找到了,它说它没有找到。出于某种原因,它只说在索引4中找到了0

static int Numbers[]=new int[0];

private static class ButtonHandler implements ActionListener
 {
     public void actionPerformed(ActionEvent e)
     {
            //get data
            String data = txtInput.getText();

            //parse for numerical value
           int  numGenerate = Integer.parseInt(data); 
           int Numbers[]=new int[numGenerate];
           String command = e.getActionCommand(); 
         if (command.equals("Sort"))
         { 

           String unSortedData="";

           //ouput unsoted data
           for (int x=0;x<=Numbers.length-1;x++)
           {
               Numbers[x]=(int)(Math.random()*2001)-1000;
               unSortedData+=(Numbers[x]+",");

           }
            txtUnsorted.setText(unSortedData);




             if (btnQuickSort.isSelected())
            {
                QuickSort(Numbers,0,Numbers.length-1);
            }
             if (btnMergeSort.isSelected())
            {
                MergeSort(Numbers,0,Numbers.length-1);
            } 
            if (btnInsertionSort.isSelected())
            {
                InsertionSort(Numbers);
            } 
            if (btnSelectionSort.isSelected())
            {
                SelectionSort(Numbers);
            } 
            if (btnShellSort.isSelected())
            {
                ShellSort(Numbers);
            } 
            if (btnShakerSort.isSelected())
            {
                 ShakerSort(Numbers);
            }
            generated=true;




         }
               if (command.equals("Search"))
         {
                //get data
                String data2 = txtSearch.getText();
                //parse for numerical value
                int  FindNum = Integer.parseInt(data2);

                if (generated==true)
                {
                            int counter=0;

                            for (int x=0;x<Numbers.length;x++)
                            {
                              if (Numbers[x]==FindNum)
                              {
                                lblSearch.setText("Status: Found "+ FindNum+ "at index "+ counter );
                              }
                             counter++;   
                            }

                }
                else
                {

                    lblSearch.setText("Status:Error! Enter or sort a number");
                }
         }



     }
 } 

静态整数[]=新整数[0];
私有静态类ButtonHandler实现ActionListener
{
已执行的公共无效操作(操作事件e)
{
//获取数据
字符串数据=txtInput.getText();
//解析数值
int numGenerate=Integer.parseInt(数据);
整数[]=新整数[numGenerate];
String command=e.getActionCommand();
if(command.equals(“Sort”))
{ 
字符串unSortedData=“”;
//输出未记录的数据

对于(int x=0;x目前,如果运行“搜索”组件,则仅使用随机数填充数组。我建议将生成和两个操作拆分为单独的方法:

private int[] randomNumbers(int size) {
    Random random = new Random();
    int[] numbers = new int[size];
    for (int i = 0; i < numbers.length; i++)
        numbers[i] = random.nextInt(2000) - 1000;
    unsortedData = Arrays.toString(numbers);
}

public void actionPerformed(ActionEvent e) {
    int[] numbers = randomNumbers(Integer.valueOf(txtInput.getText());
    switch(e.getActionCommand()) {
        case "sort":
            ...
            break;
        case "search":
            ...
            break;
    }
}

但我假设您还没有使用streams。

目前,如果您运行“搜索”组件,您只是在用随机数填充数组。我建议将生成和两个操作拆分为单独的方法:

private int[] randomNumbers(int size) {
    Random random = new Random();
    int[] numbers = new int[size];
    for (int i = 0; i < numbers.length; i++)
        numbers[i] = random.nextInt(2000) - 1000;
    unsortedData = Arrays.toString(numbers);
}

public void actionPerformed(ActionEvent e) {
    int[] numbers = randomNumbers(Integer.valueOf(txtInput.getText());
    switch(e.getActionCommand()) {
        case "sort":
            ...
            break;
        case "search":
            ...
            break;
    }
}
但是我假设您还没有使用streams。

在actionPerformed()中,一个名为“Numbers”的新局部变量由“int Numbers[]=new int[numGenerate]”定义,它屏蔽了全局变量“Numbers”。 当您删除“int”并使用“Numbers=new int[numGenerate]”时,全局变量“Numbers”可以在此处使用,并且程序可以按预期工作。

在actionPerformed()中,名为“Numbers”的新局部变量由“int Numbers[]=new int[numGenerate]”定义,它屏蔽了全局变量“Numbers”。
当您删除“int”并使用“Numbers=newint[numGenerate]”时,全局变量“Numbers”可以在此处使用,并且程序可以按预期工作。

在操作处理程序中,您创建了一个新的
数字
数组,但您只能在“sort”分支中用随机数填充。如果用户选择“search”,则该数组将用零填充。它可能在索引4中找到零,因为这是数组中的最后一项。有没有你知道如何用要搜索的随机数而不是零来获取数字数组吗?我将为你添加一个答案,在你的操作处理程序中,你创建一个新的
数字
数组,但你只在“sort”分支中用随机数填充它。如果用户选择“search”,那么数组将被零填充。大概是这样的它在索引4中找到零,因为这是数组中的最后一项。你知道如何得到包含要搜索的随机数而不是零的数字数组吗?我会为你添加一个答案。谢谢你的建议,不,我还没有使用流。我只是在高中。但是我似乎已经解决了我的问题。而不是这样做int number[]=new int[numGenerate];我做了number=new int[numGenerate];。我不明白这是怎么解决的,但它起了作用。如果你能解释一下,我将不胜感激!谢谢你的时间,谢谢你的建议,不,我还没有使用streams,我只是在高中。但是我似乎已经解决了我的问题。我没有做int number[]=new int[numGenerate],而是做了number=new int我不明白这是怎么解决的,但它起作用了。如果你能解释一下为什么我会非常感激!谢谢你的时间