我想传递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()
。
答案 0 :(得分:2)
你在这里做的不是传递System.out.println()
作为论据;您正试图将参数传递给System.out.println()
尝试将data()
的返回类型更改为String
或int
,或void
以外的任何内容,并从中返回该类型的内容。
同时更改e
函数定义中a()
的参数类型以匹配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...";
}
答案 1 :(得分:1)
如果您只想简写System.out.println
,那么请使用返回类型为void的方法接受字符串参数,并在方法内部执行:
System.out.println(argument)
答案 2 :(得分:1)
正如其他人所提到的,您不希望/需要将System.out.println
作为方法参数传递。但是,如果您想这样做(一个人永远不会知道......),您可以使用Lambda表达式在Java 8中执行此操作。
创建功能界面:
@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);
答案 3 :(得分:1)
只需将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]);
}
}
更改为:
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;
}
然后修改你的a()方法以接受String作为参数:
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;
}
}
答案 4 :(得分:0)
虽然编译器可能不允许您传递函数指针,但它应该允许您传递块。
在Objective-C中;一个块,如下面的语法:
void (^action)(NSString *s) = ^(NSString *s){ NSLog(s); }
然后,您可以将“action”块作为参数传递,并在需要时调用它:
action(@"Hello World");
块在最新的C版本中都可用,维基百科在http://en.wikipedia.org/wiki/Blocks_(C_language_extension)有一篇关于这个主题的好文章。
答案 5 :(得分:0)
I want to change this code
package Array;
import java.util.Random;
public class Array {
public static void main(String args[]) {
data();
a();
random();
a();
array();
a();
rows();
a();
System.out.println("average " + average(45,15,15,48,97,45));
}
static String s() {
return "helloWorld";
}
static void a() {System.out.println();}
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]);
}
}
static void random() {
Random rdm = new Random();
int freq[] = new int[7];
for(int i=1;i<1000;i++) {
++freq[1+rdm.nextInt(6)];
}
System.out.println("Face\tFrequency");
int frequence = freq.length;
for(int face=1;face<frequence;face++) {
System.out.println(face+"\t"+freq[face]);
}
}
static void array() {
String po[] = {"lala","po","tinkiwinki","disty"};
for(String lala: po) {
System.out.print(lala + " ");
}
System.out.println();
}
static void rows() {
int arrays[][]= {{1,5,78,15},{45,67},{875,15687,158,4515,23,2,2}};
for(int i=0;i<arrays.length;i++) {
for(int j=0;j<arrays[i].length;j++) {
System.out.print(arrays[i][j]+"\t");
}
System.out.println();
}
}
static int average(int...numbers) {
int total=0;
for(int x:numbers)
total += x;
return total/numbers.length;
}
}
class time {
int h, m, s;
void setTime(int hour,int minute,int second) {
h = ((hour>=0 && hour<=24) ? hour : 0);
m = ((minute>=0 && minute<=60) ? minute : 0);
s = ((second>=0 && second<=60) ? second : 0);
}
into this type of code for main.
a(data());
a(random());
a(array());
a(rows());
a("average " + average(45,15,15,48,97,45));