Java 我声明的数组大小是否与我的搜索相关联?
我有一个利用SwingGUI和新的排序算法和搜索的程序。我的分类工作正常,但是当我尝试搜索数字时,我让它给出一条消息,不管它是否被找到。然而,当这个数字存在时,它说它找到了,它说它没有找到。出于某种原因,它只说在索引4中找到了0Java 我声明的数组大小是否与我的搜索相关联?,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
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我不明白这是怎么解决的,但它起作用了。如果你能解释一下为什么我会非常感激!谢谢你的时间