【问题标题】:Setting a variable to System.in outside of the class在类之外将变量设置为 System.in
【发布时间】:2017-10-14 17:27:54
【问题描述】:

我只能在编写这行代码的类之外更改代码:

BufferedReader br=new BufferedReader(new InputStreamReader(in));

由于 inputStreamReader 构造函数只接受 InputStreams,我如何在另一个类中设置一个变量来引用像 System.in 这样的 InputStream?注意:如果有帮助,变量 'in' 尚未声明。

class Prime {        
    void checkPrime(int... possi) {
        for(int item: possi) {
            for(int i =0; i<item; i++){
                if(i>2 & (item % i == 0)){
                    System.out.print(item + " ");
                    break;
                }
            }
        }
        System.out.println();
    }
}
public class Solution {

    public static void main(String[] args) {
        try{
        BufferedReader br=new BufferedReader(new InputStreamReader(in));
        int n1=Integer.parseInt(br.readLine());
        int n2=Integer.parseInt(br.readLine());
        int n3=Integer.parseInt(br.readLine());
        int n4=Integer.parseInt(br.readLine());
        int n5=Integer.parseInt(br.readLine());
        Prime ob=new Prime();
        ob.checkPrime(n1);
        ob.checkPrime(n1,n2);
        ob.checkPrime(n1,n2,n3);
        ob.checkPrime(n1,n2,n3,n4,n5);  
        Method[] methods=Prime.class.getDeclaredMethods();
        Set<String> set=new HashSet<>();
        boolean overload=false;
        for(int i=0;i<methods.length;i++)
        {
            if(set.contains(methods[i].getName()))
            {
                overload=true;
                break;
            }
            set.add(methods[i].getName());

        }
        if(overload)
        {
            throw new Exception("Overloading not allowed");
        }
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
    }

}

【问题讨论】:

  • 如果你不能改变那个代码,并且in没有被声明,那么除非你能改变超类来添加一个变量,你被困住了。不过,这是一个非常奇怪的要求。为什么不能直接更改该代码以使用System.in
  • 一行代码不足以回答这个问题。 in 声明在哪里,是否有一个 setter 方法,只有两件事很高兴知道。
  • 我提供了更多上下文;这是一个新的挑战,但我似乎无法找到使其工作的方法......我收到“找不到符号”的错误(未声明)。但是如何在课外声明呢?
  • 我可以在类外声明那个静态字段吗?如果不是,这是否意味着这个挑战是不可能的? ;)

标签: java inputstream


【解决方案1】:

啊,当 Oleg 说 'in' 需要是一个静态字段时,我意识到你可以导入 static java.lang.System.*;以便将 'System.in' 替换为 'in'。

【讨论】:

  • 是的,你可以这样做。我刚刚写完一个类似的答案,尽管我使用了另一个类并且您的解决方案更简单。我想我错了,这实际上是可能的。这是一个求职面试问题吗?
【解决方案2】:

您可以使用静态导入。

这是Static Import wiki 链接,它通过示例解释了Java 中的静态导入。 使用静态导入时要小心,因为它可能会导致歧义问题。

【讨论】:

  • 为了其他用户的利益,请从上述答案的链接中添加一些关键细节。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 2016-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多