这是一个使用合并排序的程序,从1到1000对1000个数字的列表进行排序。它显示原始列表,然后调用递归方法对其进行排序,然后显示。
代码中我不明白的是这两行:
合并排序(数字,低,中);//在方法中,它会说“这里”
合并排序(数字,中间1,高);
我是java的初学者,这与我所学的一切背道而驰,因为我无法理解如何在方法中调用方法。除非它是一个我怀疑的对象。有人能解释一下这两行代码的作用吗?
import java.io.*;
import java.util.*;
import java.text.*;
public class MergeSortExample
{
static final int Max = 1000;
static void MergeSort (int[] numbers, int lo, int n) // recursive method
{
int low = lo; // 0
int high = n; // 999
if (low >= high) // return case;
{
return;
}
int middle = (low + high) / 2;
MergeSort (numbers, low, middle); // HERE
MergeSort (numbers, middle + 1, high); // HERE
int end_low = middle;
int start_high = middle + 1;
while ((lo <= end_low) && (start_high <= high))
{
if (numbers [low] < numbers [start_high])
{
low++;
}
else
{
int Temp = numbers [start_high];
for (int k = start_high - 1 ; k >= low ; k--)
{
numbers [k + 1] = numbers [k];
}
numbers [low] = Temp;
low++;
end_low++;
start_high++;
}
}
}
public static void main (String str[]) throws IOException
{
BufferedReader stdin = new BufferedReader (new InputStreamReader (System.in));
DecimalFormat df = new DecimalFormat ("#");
BufferedReader reader = new BufferedReader (new FileReader ("unsorted.txt"));
//BufferedWriter writer = new BufferedWriter (new FileWriter ("test.txt", true)); // text to write
int[] numbers = new int [Max]; // if its int the 0's in the beginiing would be cut off
String line = null;
int[] count = {0};
int low = 0;
int high = count [0] - 1;
while ((line = reader.readLine ()) != null)
{
numbers [count [0]] = Integer.parseInt (line);
System.out.println (numbers [count [0]]);
count [0]++;
}
reader.close ();
System.out.println ();
System.out.println ("There are " + count [0] + " numbers.");
System.out.println ();
///////////////////////////////////////////////////////////////////////////////
MergeSort (numbers, 0, count [0] - 1);
for (int i = 0 ; i < count [0] ; i++)
{
System.out.println (numbers [i]);
}
}
}
当然一个方法可能会调用另一个方法。这里唯一令人困惑的部分是这个方法是静态的,这意味着它是在类而不是对象上调用的。由于它是在定义它的类内部调用的,所以你不需要编写MergeSortexample. MergeSort()
。如果你想了解静态和实例方法和字段之间的区别,我建议你看看Java网站上的教程。
它是静态方法MergeSort()
的递归调用。这里使用了错误的约定。方法名称应以小写开头
这是基本的递归。合并排序的工作原理是将列表分成两部分,合并排序每个部分,然后将两个列表合并在一起。您询问的部分是合并对两个部分中的每个部分进行排序的部分。
事件处理程序添加到GameGui.java类的GridPane中,从第82行开始。 基本上,我试图找到您在网格窗格中拖动这个对象的任何节点的索引。通过将SetonMouseEnter应用到gridpane中的每个节点,我可以在不拖动的情况下完成这一任务,但是当我试图利用SetonMouseDragEnter时,我什么也没有得到。 有人有办法让这个工作吗? 这些是我应用于GridPane中节点的事件
输入是:1。硬币中一定数量货币的总重量,2。旧货币硬币的价值和相应重量。 目标是找到给定金额货币的最低可能货币价值。 我的方法是按货币的价值/重量比升序对硬币进行排序,然后贪婪地将第一枚硬币的重量尽可能多地匹配到总和中(跟踪它匹配的次数),然后匹配将第二枚硬币的重量尽可能多次地放入余数中,等等,对于所有硬币或直到余数为零(如果不是,情况是不可能的)。 法官说我的答案是错误的。你能给我一个关于算法错
问题内容: 我有PK,它是自增密钥。我需要将记录插入数据库中,然后取回该PK并在另一个插入中使用它。 但是,我想在一次交易中做到这一点。那可能吗。这样的想法是,如果我必须执行的任何更新/插入都失败了,那么我可以回滚所有内容,但是我的印象是我需要进行一次提交。 我本来打算先在ado.net上执行此操作,然后切换到存储过程,因为我认为这可能会解决此问题。 SP在这种情况下会帮助我吗? 问题答案: 是的
问题内容: 我有一个父类A,及其子B。两者都具有带有diff类型参数的方法。 A级 B级 运行此命令时,将获得“ Base impl:override”作为输出! 指向的对象,而他经过的说法是,所以不应该调用它的方法是什么? 问题答案: 当您使用类型A的引用时,您只会看到为类A定义的方法。由于B中不会覆盖B(因为它具有不同的签名),因此不会调用它。 如果要使用类型B的引用,则两种方法都将可用,并且
这是我的建筑。格雷德尔: 我试图找出问题所在,使用以下代码来分析问题: 结果是:
我在使用fs.readfile进行同步时遇到了一个问题,他们没有在第一次初始化,如果我再次尝试请求,那么我就有结果了。我知道我可以用promise和我从Kriskowal找到一些有用的东西。我试过但没有成功。我不太明白如何实施它。如果有人能帮忙,我将永远感激。 代码: