我的问题是关于在哪些Java检查的条件for循环时,有一个print语句的顺序做在该循环的"条件".这似乎是一个不切实际的事情(我还没有见过它在任何实际的方式使用),但我缺乏的是什么印有理解我想,我可能不完全了解一个for循环的功能.最近的一次考试出现了以下问题:
使用n = 5的输入打印以下方法是什么?
public static void mystery(int n) {
for (int i = -1; i < n; System.out.print(i + " ")) {
i++;
}
}
Run Code Online (Sandbox Code Playgroud)
正确答案是:0 1 2 3 4 5
对我来说,似乎应该循环打印-1,然后加1我,打印0 .....直到我= 4,然后将打印4,加1我,并打破循环循环的条件i <n.为什么正确答案是什么,为什么我的逻辑存在缺陷?
我正在尝试编写一个函数"dom_rank r1 r2",它根据两张扑克牌的相对等级返回一个布尔值(等级是我定义的类型,它有值"Six","Seven","Eight"... ......"国王","王牌").如果r1是King而r2是Jack,则r1大于r2并且函数返回true,如果r1是Six而r2是Ten,则函数返回false.据我所知,我可以列出两种卡输入的所有可能性(我只处理六张牌,这有三种不同的可能性),但我正在尝试编写更简单的代码.该方法看起来像:
let dom_rank r1 r2 = match r1, r2 with
| Ace, _ -> true
| King, (Queen || Jack || Ten ........) -> true
Run Code Online (Sandbox Code Playgroud)
我在布尔表达式"(Queen || Jack || Ten ........)"的开头遇到语法错误.为什么我不能以这种方式列出r2的几种可能性?有没有办法在Ocaml中编写这个表达式?
我已经在JAVA中实现了多线程MergeSort,并用不同数量的线程测试了算法的运行时间。我在双核处理器上运行代码,该算法以4或8个线程运行最快。这对我来说没有意义-我有两个核心。这是我的源代码。
public static void parallelMergeSort(int[] a, int NUM_THREADS)
{
if(NUM_THREADS <= 1)
{
mergeSort(a);
return;
}
int mid = a.length / 2;
int[] left = Arrays.copyOfRange(a, 0, mid);
int[] right = Arrays.copyOfRange(a, mid, a.length);
Thread leftSorter = mergeSortThread(left, NUM_THREADS);
Thread rightSorter = mergeSortThread(right, NUM_THREADS);
leftSorter.start();
rightSorter.start();
try {
leftSorter.join();
rightSorter.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
merge(left, right, a);
}
private static Thread mergeSortThread(int[] a, int NUM_THREADS)
{
return new Thread()
{
@Override
public void run()
{
parallelMergeSort(a, NUM_THREADS …Run Code Online (Sandbox Code Playgroud)