powershell'<'运算符保留供将来在Java中使用

时间:2016-09-15 05:23:05

标签: java algorithm powershell

我已经阅读了很多关于这个问题的答案,但没有发现两个文件之间的比较,实际上这是基于 BinarySearch 算法一书的样本>,这是源代码

import java.util.Arrays;
import edu.princeton.cs.algs4.*;

public class prac1_1_23{

public static boolean BinaryLookup(int key, int[] arr) {
    int low = 0;
    int high = arr.length - 1;
    while(low <= high) {
        int mid = low + ((high - low) >> 1);
        if(key < arr[mid])
            high = mid - 1;
        else if(key > arr[mid])
            low = mid + 1;
        else
            return true;
    }
    return false;
}

public static void main(String[] args) {
    char symbol = '-';
    int[] whitelist = new In(args[0]).readAllInts();
    Arrays.sort(whitelist);
    while(!StdIn.isEmpty()) {
        int key = StdIn.readInt();
        boolean found = BinaryLookup(key, whitelist);
        if('+' == symbol && !found)
            StdOut.println(key);
        if('-' == symbol && found)
            StdOut.println(key);
    }
}
}

此示例使用了本书作者制作的库,可以通过Algorithms访问该库,问题是当我想通过Windows的 PowerShell 运行此程序时,像命令

java prac1_1_23 largeW.txt < largeT.txt

我遇到了类似的问题 error

实际上我找到了运行此代码的解决方案,但在PowerShell上解决它无用,这需要我使用本书作者编写的命令行程序,该程序可以在&#34; algs4.cs的网站上下载.princeton.edu / windows /&#34;,它需要使用命令行编译和运行程序,如

javac-algs4 prac1_1_23.java    //compile command

java-algs4 prac1_1_23 largeW.txt < largeT.txt   //run command

它确实有效,但我想知道我们是否可以利用原来的CLI,因为我发现有人可以在Linux操作系统上运行原始代码而没有问题。

感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:3)

您是否尝试使用--%运算符为重定向添加前缀?例如:

   cmd /c --% java prac1_1_23 largeW.txt < largeT.txt

上面的命令在命令前面加上三件事,让我解释一下:

  • cmd调用cmd.exe,它知道你的意思<

  • /c告诉cmd.exe在命令行后面处理一个命令,然后退出。

  • --%告诉PowerShell单独保留命令行的其余部分,以便cmd.exe可以处理<重定向。

这样您就不需要命令脚本了。

答案 1 :(得分:1)

这是一个PowerShell问题,如The '<' operator is reserved for future use (PowerShell)中所述。

如第一个答案所述,您可以像这样运行命令;

Get-Content largeT.txt | java prac1_1_23 largeW.txt

查看有关在powershell中重定向输入的其他方法的其他答案。