- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是一个相对缺乏经验的程序员,正在为家庭作业开发一个基本的数组生成/搜索程序。我让它工作得很好,但在我设置搜索键后它会随机卡住(不会抛出任何我能检测到的异常或错误消息)。然而,真正的问题是我不能总是通过做同样的事情来重现错误。我正在 Eclipse 中编程和运行程序。
这是我的程序的基本结构;为了简单起见,我只包括似乎导致问题的 setter 和按钮的实际代码。我怀疑这很简单,但我看不出这段代码应该锁定程序的原因。
public class ArraySearcher extends JPanel
implements ActionListener {
private static final long serialVersionUID = 6449138670325520140L;
/**
* A program description.
*/
// Fields (array and search parameters)
static int key;
static int arraySize;
static int min;
static int max;
static int midpoint;
// (Number of search steps taken by each search algorithm)
static int linSteps;
static int binSteps;
// (JButtons, JLabels, JTextFields, and the log for displaying results)
static JButton runButton, chKeyButton, newArrayButton, exitButton;
static JTextField lStepField, bStepField;
static JTextField keyField;
static JTextField arraySizeField;
static JTextField time;
static JTextArea log;
// (The arrays to be used)
static int[] randArray, sortArray;
// (Makes the output formatting a little easier to read)
public static String newline = "\n", twolines = "\n\n";
// The constructor
public ArraySearcher() {
// Setting up the fields and GUI
}
// Getters and setters
protected static int getKey() {
return key;
}
protected static void setKey() {
boolean success = false;
// loop and try catch block to deal with the potential parsing exception
while (success == false) {
try {
key = Integer.parseInt(JOptionPane.showInputDialog(
"Please enter the number you\nwish to search for:"));
keyField.setText(Integer.toString(getKey()));
success = true;
}
catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null,
"There was a number format error. Please\n" +
"input only positive, whole numbers.");
}
}
}
// More getters and setters...
public static void main(String[] args) {
// Implement the GUI, all other work is handled from
// there and from within the constructor
theGUI();
}
private static void theGUI() {
// Set up the GUI and allow user to set min and
// max values for the random number generator
}
@Override
public void actionPerformed(ActionEvent e) {
//Handling of the run/restart button.
if (e.getSource() == runButton) {
}
// Handling the Change Key button
else if (e.getSource() == chKeyButton) {
setKey();
chKeyButton.setText("Change Key");
linSearch(getRandArray()); // Implicit searches triggered by
binSearch(getRandArray()); // selecting a new search key
}
// Handling the New Array button
else if (e.getSource() == newArrayButton) {
}
// Handling of the exit button.
else if (e.getSource() == exitButton) {
}
}
// Method for building the array of random numbers; includes an implicit search
// which can be canceled (i.e. just build and return the array) by passing it
// a false condition when it's called
private void arrayBuilder(boolean fullRun) {
}
private void linSearch(int[] arrayIn) {
// Linear search method
}
private void binSearch(int[] arrayIn) {
// Binary search method
int result = -1; // Location of a positive match; initialized to an impossible result
int tempMax = arraySize; // Dynamic maximum index for progressive midpoint calculations
int tempMin = 0; // Dynamic minimum index
int newMid = 0; // Dynamic midpoint
int count = 0; // Counts the steps required to find value
boolean success = false; // A loop escape boolean
log.append("RUNNING BINARY SEARCH" + newline);
log.append("SORTING ARRAY..." + twolines);
sortArray = sort(arrayIn); // Sort the array prior to searching
// Array midpoint index calculation
midpoint = tempMax/2 - tempMin/2; // Calculation prevents buffer overflow; allows for nonzero minimum
newMid = midpoint;
// Search loop
while (tempMin != tempMax && success == false) {
if (sortArray[newMid] == key) {
success = true;
result = newMid;
count++;
}
else if (sortArray[newMid] < key) {
tempMin = newMid;
newMid = tempMax/2 - tempMin/2;
count++;
}
else if (sortArray[newMid] > key) {
tempMax = newMid;
newMid = tempMax/2 - tempMin/2;
count++;
}
}
binSteps = count;
bStepField.setText(Integer.toString(binSteps));
log.append(twolines);
if (result != -1) {
log.append("Success! The number " + Integer.toString(key) + " was found " +
"at array location " + result + "." + newline);
}
else if (result == -1) {
log.append("Failure. The number " + Integer.toString(key) +
" was not found in the array." + newline);
}
log.append("The binary search was completed in " + Integer.toString(binSteps) +
" steps." + newline + newline);
log.setCaretPosition(log.getDocument().getLength());
}
private int[] sort(int[] arrayIn) {
// Method for sorting the random array before
// performing a binary search
}
最佳答案
执行 tempMax/2 - tempMin/2
不会让你得到中点。考虑一个简单的例子:如果 tempMin = 2
和 tempMax = 5
,则 tempMax/2 - tempMin/2 = 5/2 - 2/2 = 2 - 1 = 1
。
获取中点而不溢出的典型方法是mid = (min + max) >>> 1
。
关于Java UI 程序随机卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13885113/
我正在我的 xamarin.forms 应用程序中实现扫描仪功能,为此我正在使用 iOS native AVCaptureSession。但我的问题是在扫描或捕获 session 处于事件状态并且设备
所以我目前正在为我的项目制作一个音乐应用程序,它允许用户创建自己的音乐播放列表。但是,当我单击显示媒体选择器按钮时,它只显示白屏,当包含媒体选择器的 View 是 Initial View Contr
当我尝试在模拟器中启动 AVD 时,会出现一个小窗口(见图片),5 秒后它说没有响应并一直保持这种状态直到我关闭它。 我在网上搜索并尝试了所有解决方案,但都没有成功 在 BIOS 中启用了虚拟化 已安
尝试使用以下命令从视频中提取特定帧(删除了文件的特定名称!: ffmpeg -i video.mp4 -vf "select-gte(n\,6956)"-vframes 10262 文件夹/帧%d.j
我怎么知道终端正在继续工作而不中断它? 我已经运行了以下 git 命令: clone git://ligo-vcs.phys.uwm.edu/lalsuite.gituote 一段时间后它似乎被卡住了
我对 WPF 中的数据网格有一个奇怪的问题。我正在为我的应用程序使用 MVVM 模式,并且我的 View 模型实现了 idataerrorinfo 接口(interface)。每当我在添加新行后在我的
我有这个 Excel 文件,当我输入数据时它卡住了。例如,我双击一个单元格,输入数据,然后按“输入”。它会卡住而不是进入下面的细胞。按几次“enter”不会解冻程序,唯一有效的是用鼠标选择另一个单元格
我有线程池的任务队列,每个任务都有卡住锁定其正在使用的所有资源的倾向。并且除非重新启动服务,否则这些无法释放。 ThreadPool 中有没有办法知道它的线程已经被卡住?我有一个使用超时的想法(虽然我
我制作了以下小程序来确定内存是否用于 freeze(X,Goal) 之类的目标回收时 X变得无法访问: %:- use_module(library(freeze)). % Ciao Prolog n
我有一个使用 swing 的简单 java 应用程序。然而,当我执行程序时,框架将会出现,但我无法单击任何地方,并且按钮仅在几秒钟后出现。我对 javas Swing 库非常陌生,所以我可能会丢失一些
我正在尝试创建一个简单的 TCP 客户端服务器应用程序接口(interface)用户可以在按下相应按钮时启动或停止服务器我创建了一个 StartServer 按钮,当用户按下按钮时它应该连接到服务
我正在尝试从 ftp 服务器下载文件,但在检索文件时卡住了。我正在使用 commons-net-3.6.jar 我注意到的事情 当我使用 ftpClient.enterRemotePassiveMod
我正在尝试编写一个函数,该函数将能够找到位于我系统上的可执行文件搜索路径中的任意可执行文件。我遇到了一些输入会导致 SearchPathW 的问题无限期地卡住,我不确定到底发生了什么。 std::op
我的 Nativescript 应用程序的许多页面中都有 RadSideDrawer。主应用程序组件有一个 page-router-outlet并且所有其他页面都通过导航加载到此组件中。带抽屉的页面包
我有一个最小的服务器,它等待客户端连接,然后他启动一个线程,将回复发送回客户端,问题是回复。 这是服务器的代码: int port = 1234; ServerSocket servSock =
我有一个使用 C# 的 WinForms 应用程序。我尝试从文件中读取一些数据并将其插入到数据表中。虽然此操作很忙,但我的表单卡住并且我无法移动它。有谁知道我该如何解决这个问题? 最佳答案 这可能是因
在我们学校最新的项目中,我遇到了一些问题。我想观察新条目的路径,该路径是由文件导向器按钮选择的,但如果我选择任何文件,整个窗口都会卡住...我猜它被卡住,因为调用了“observePath”方法,但我
当我输入一百万作为输入数字时,我的程序卡住了。我该如何解决这个问题? 我尝试将第二个 for 循环分离为第二个函数,但没有成功。 import java.io.*; public class Arra
早上好编译我的应用程序时,我在 Android Studio 上遇到问题。我在构建时没有收到关于 app:transformClassesWithDexBuilderForDebug 的任何输出错误,
我正在使用以下触发器 DELIMITER ; CREATE TRIGGER updateCount AFTER INSERT ON user_info FOR EACH ROW BEGIN UPDA
我是一名优秀的程序员,十分优秀!