我声明的数组大小是否干扰我的搜索?

问题描述 投票:1回答:2

我有一个程序利用Swing GUI和新的排序算法以及搜索功能。我的排序工作正常,但是当尝试搜索数字时,无论是否找到它,它都会给出一条消息。但是,宁可说它在数字存在时也找到了它,而是说它没有找到。而且由于某种原因,它只说在索引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");
                }
         }



     }
 } 

java arrays search
2个回答
0
投票

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

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;
    }
}

注意,有一种更简单的方法来获取随机整数数组:

int[] numbers = random.ints(size, -2000, 2000).toArray();

但是我假设您还没有使用流。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.