Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在传递System.out.println();作为方法中的参数_Java_Arguments_Parameter Passing_Void_Typeof - Fatal编程技术网

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;
    }
}