我正在使用递归编写二进制搜索算法,我只是不知道如何开始。这是我到目前为止所做的:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class BinarySearch implements ActionListener
{
public static void main(String[] args)
{
new BinarySearch();
}
private JSpinner searchSpinner;
private JButton searchButton;
private JList searchList;
Integer[] myNumbers = {1, 3, 5, 6, 8, 9, 10, 12, 14, 15};
public BinarySearch()
{
JFrame myFrame = new JFrame(); // create the JFrame window
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel mainPanel = (JPanel)myFrame.getContentPane();
mainPanel.setLayout(new BoxLayout(mainPanel,BoxLayout.Y_AXIS));
mainPanel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
searchSpinner = new JSpinner(new SpinnerNumberModel(5,0,99,1));
searchButton = new JButton("Search");
searchButton.addActionListener(this);
searchButton.setAlignmentX(Component.CENTER_ALIGNMENT);
searchList = new JList(myNumbers);
searchList.setFixedCellWidth(50);
searchList.setVisibleRowCount(myNumbers.length);
JLabel label = new JLabel("Target Value");
label.setAlignmentX(Component.CENTER_ALIGNMENT);
mainPanel.add(label);
mainPanel.add(searchSpinner);
mainPanel.add(Box.createRigidArea(new Dimension(0,5)));
mainPanel.add(searchButton);
mainPanel.add(Box.createRigidArea(new Dimension(0,5)));
mainPanel.add(searchList);
myFrame.pack();
myFrame.setVisible(true);
}
public void actionPerformed(ActionEvent event)
{
Object control = event.getSource();
if (control == searchButton)
{
searchList.clearSelection();
int targetValue = (Integer)searchSpinner.getValue();
int index = binarySearch(myNumbers,targetValue,0,myNumbers.length-1);
if (index >= 0)
{
searchList.setSelectedIndex(index);
}
else
{
JOptionPane.showMessageDialog(null, "Number " + targetValue + " not found!");
}
}
}
public int binarySearch(Integer[] targetArray, int targetValue, int lowIndex, int highIndex)
{
}
}
在“public int binarcySearch()”部分的底部是我被困的地方。我想我需要一些带有回报的if语句,也许还有其他一些东西,但我不知道到底是什么。我知道我应该做什么,但不知道怎么做。以下是本书中的一些提示,我不确定如何实现:
请记住,我是一个非常早,初学者,婴儿程序员和DIY课程,我在解释事情时很糟糕。所以请简单明了。谢谢。
答案 0 :(得分:4)
注意:回答是因为我缺少评论代表
这令人沮丧。那么,您复制的书中的提示是关于如何实现binarySearch()方法的规范。我如何建议学习如何解决问题的方法是逐步使用每个提示语句,使用到目前为止学到的各种流控制语句,并查看结果是否通过了测试。 / p>
事实上,这就是今天有多少专业开发人员工作。我们编写测试用例,描述在我们实际编写代码之前我们想要完成的结果,知道它会失败。我们完成测试后就完成了。
由于说明不清楚,谷歌搜索“java二进制搜索”为你带来了什么?计算机科学作为二元搜索的基础,有许多例子和解释可能对学生更好。
This可能会有所帮助。
答案 1 :(得分:2)
这是你的代码:
public int binarySearch(Integer[] targetArray, int targetValue, int lowIndex, int highIndex)
{
if (lowIndex > highIndex) return -1;
int midIndex = lowIndex + (highIndex - lowIndex) / 2;
if (targetArray[midIndex] == targetValue) return midIndex;
if (targetArray[midIndex] > targetValue)
return binarySearch(targetArray, targetValue, lowIndex, midIndex-1);
else
return binarySearch(targetArray, targetValue, midIndex+1, highIndex);
}