以下代码从命令行接收两个文件名,并在第二个文件中打印不在第一个文件中的数字。我还需要打印有多少这样的数字。 假设程序打印出来:
12
13
14
我必须将其更改为最后打印:
12
13
14
There are 3 numbers!
这就是我在主函数中创建变量 ns
的原因。
import java.util.Arrays;
public class BinarySearch
{
public static int rank(int key, int[] a)
{
int lo = 0;
int hi = a.length - 1;
while (lo <= hi)
{
int mid = lo + (hi - lo) / 2;
if (key < a[mid]) hi = mid - 1;
else if (key > a[mid]) lo = mid + 1;
else return mid;
}
return -1;
}
public static void main(String[] args)
{
In in = new In(args[0]);
int[] whitelist = in.readAllInts();
Arrays.sort(whitelist);
int ns = 0;
while (!StdIn.isEmpty())
{
int key = StdIn.readInt();
if (rank(key, whitelist) == -1)
{
StdOut.println(key);
ns++;
}
}
System.out.println(ns);
}
}
它编译并运行java BinarySearch tinyW.txt < tinyT.txt
。
它确实打印
12
13
14
但它最终不会打印 ns
变量。
有谁知道为什么?
答案 0 :(得分:0)
程序不打印ns变量的唯一原因是它没有执行那行代码。
您可能有一个无限循环,因为“!StdIn.isEmpty()”始终为真。
您可以通过在while指令上方移动该打印代码来快速检查整数是不是您的问题。
答案 1 :(得分:0)
您应该正确设置$ CLASSPATH。我建议您添加 .bashrc
:
#Variables
JAVA=$HOME/algs4
#Set $CLASSPATH
if [ -d $JAVA ]; then
export CLASSPATH=.:$JAVA/stdlib.jar:$JAVA/algs4.jar
fi