【发布时间】: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