有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么在,StdIn,StdOut中没有解析

我有一本算法书,将代码复制到我的eclipse或windows cmd中,使用javac进行编译,InStdInStdOut未解析。我看到我已经将JAVA_HOME设置为我的jdk目录C:\Program Files (x86)\Java\jdk1.7.0。有什么问题吗

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)
    {
        int[] whitelist = **In**.readInts(args[0]);

        Arrays.sort(whitelist);

        while(!**StdIn**.isEmpty())
        {
            int key = **StdIn**.readInt();
            if(rank(key, whitelist) == -1)
                **StdOut**.println(key);

        }
    }
}

粗体类(此处用****括起来)未解析


共 (2) 个答案

  1. # 1 楼答案

    至少有几本Java编程教科书不让您使用标准Java,而是让您使用它们自己的类,因为这对初学者来说“更容易”。其中一个是R.Sedgewick和K.Wayne的《Java编程入门》,另一个是Garside和Mariani的《Java:第一次接触》

    您需要下载自定义类并将其放在类路径上;如果有什么好处,应该在教科书中描述如何做到这一点

    有时这是在实验室的计算机上完成的,但你必须自己在自己的计算机上完成

  2. # 2 楼答案

    被称为Stdin和StdOut的流被称为

    System.in
    

    System.out
    

    分别在Java中

    乍一看,你似乎错过了课堂上的这两行:

    static InputStream StdIn = System.in;
    static PrintStream StdOut = System.out;
    

    但是,请注意,在Java中,命名约定指定使用camelCased变量名,以非大写字母开始。所以应该是这样的:

    static InputStream stdIn = System.in;
    static PrintStream stdOut = System.out;
    

    (别忘了更改方法中的变量引用…)
    但是很少进行这种抽象,这些流通常只是通过系统类引用

    然而,感谢@harpun,他显然对手头的教科书很熟悉,他指出,你参考的课程是为教科书制作的图书馆的一部分