Java 正在传递System.out.println();作为方法中的参数
我想传递Java 正在传递System.out.println();作为方法中的参数,java,arguments,parameter-passing,void,typeof,Java,Arguments,Parameter Passing,Void,Typeof,我想传递System.out.println()作为参数,但编译器不允许我将void类型作为参数返回。这就是我想要它的原因 public class Array { public static void main(String args[]) { a(data()); } static void a(e) { System.out.println(e); } static void data() { .
System.out.println()
作为参数,但编译器不允许我将void类型作为参数返回。这就是我想要它的原因
public class Array {
public static void main(String args[]) {
a(data());
}
static void a(e) {
System.out.println(e);
}
static void data() {
...
}
}
那么我们想要的是什么呢a(data())代码>编译后的外观是这样的
a(data()) = System.out.println(data(){...});
最后我想速记System.out.println()
这里所做的不是将System.out.println()作为参数传递;您正试图将参数传递给System.out.println()
尝试将data()
的返回类型更改为String
,或int
,或除void
以外的任何内容,然后从中返回该类型的内容
同时更改a()
函数定义中e
的参数类型,以匹配data()
的返回类型
进行这些更改后,调用a(data())代码>将实际打印出一些内容
例如:
public static void main(String args[]) {
a(data());
}
// shorthand for System.out.println
static void a(String e) {
System.out.println(e);
}
// a method that returns some data
static String data() {
// replace this with whatever actual data you want to return
return "This is some data...";
}
虽然编译器可能不允许您传递函数指针,但它应该允许您传递块
目的-C;按以下语法创建块:
void (^action)(NSString *s) = ^(NSString *s){ NSLog(s); }
然后,您可以将“action”块作为参数传递,并在需要时调用它:
action(@"Hello World");
块在所有最新版本的C中都可用,Wikipedia在上有一篇关于这个主题的好文章。如果您只想简写System.out.println
,那么就有一个返回类型为void的方法,该方法接受字符串参数,并且在该方法内部执行以下操作:
System.out.println(参数)
我想更改此代码
封装阵列;
导入java.util.Random;
公共类数组{
公共静态void main(字符串参数[]){
数据();
a();
随机();
a();
数组();
a();
行();
a();
系统输出打印项次(“平均值”+平均值(45,15,15,48,97,45));
}
静态字符串s(){
返回“helloWorld”;
}
静态void a(){System.out.println();}
静态void数据(){
int数组[]={1,5,6};
int alength=数组长度;
System.out.println(“位置\数据”);
对于其他人提到的(int i=0;i,您不想/不需要将System.out.println
作为方法参数传递。但是,如果您想这样做(谁也不知道…),您可以在Java 8中使用Lambda表达式这样做
创建功能接口:
@FunctionalInterface
public interface Action {
void run(String param);
}
将此接口传递给方法:
public class MyClass {
public void execute(Action action){
action.run("Hello!");
}
}
使用此类:
MyClass c = new MyClass();
c.execute(System.out::println);
只需将println语句保存为String并返回以进行打印
您的代码:
static void data() {
int array[] = {1,5,6};
int alength = array.length;
System.out.println(" Location\tData");
for(int i=0;i<alength;i++) {
System.out.println(" " + i + "\t\t" + array[i]);
}
}
工作示例可能如下所示:
public class Array {
public static void main(String args[]) {
println(data());
}
// I strongly advise to use understandable naming
// a() is completely uninformative
static void println(String result) {
System.out.println(result);
}
static String data() {
int array[] = { 1, 5, 6 };
int alength = array.length;
// Note extra \n symbol for new line
String result = " Location\tData\n";
for (int i = 0; i < alength; i++) {
result += " " + i + "\t\t" + array[i] + "\n";
}
return result;
}
}
公共类数组{
公共静态void main(字符串参数[]){
println(data());
}
//我强烈建议使用可理解的命名
//a()完全没有信息
静态void println(字符串结果){
系统输出打印项次(结果);
}
静态字符串数据(){
int数组[]={1,5,6};
int alength=数组长度;
//注意新行的额外\n符号
String result=“Location\tData\n”;
对于(inti=0;i
这应该是对您的问题的编辑,而不是回答。但无论如何,我不完全确定您在问什么。看起来您正在尝试让a()
处理其他函数的所有打印。有两种方法可以做到这一点,这两种方法都涉及更改a()
看起来像我在回答中描述的那样。如果您希望main()
看起来像您描述的那样,您需要更改data()
、random()
、array()
和rows()的返回类型
到string
并返回包含当前打印内容的字符串对象。第二种方法是将这些函数中对System.out.println()
的所有调用替换为a()
。例如:在data()
中,更改System.out.println(“+i+”\t\t”+array[i]”);
到a(“+i+”\t\t“+array[i]);
然后a()
将为您进行打印。
static String data() {
int array[] = {1,5,6};
int alength = array.length;
//Note extra \n symbol for new line
String result = " Location\tData\n";
for(int i=0;i<alength;i++) {
result += " " + i + "\t\t" + array[i] + "\n";
}
return result;
}
static void a(String result) {System.out.println(result);}
public class Array {
public static void main(String args[]) {
println(data());
}
// I strongly advise to use understandable naming
// a() is completely uninformative
static void println(String result) {
System.out.println(result);
}
static String data() {
int array[] = { 1, 5, 6 };
int alength = array.length;
// Note extra \n symbol for new line
String result = " Location\tData\n";
for (int i = 0; i < alength; i++) {
result += " " + i + "\t\t" + array[i] + "\n";
}
return result;
}
}