我正在学习一些Java 101语法。在我正在尝试的练习中,我无法获得增加的值来打印。有任何想法吗?
这是我的代码:
class StaticTest {
static int i = 47;
}
class incrementable {
static void increment() { StaticTest.i++; }
}
class DataOnly {
int i;
double d;
boolean b;
public static void main (String[] args) {
incrementable t = new incrementable();
DataOnly df = new DataOnly();
df.i = t.increment();
System.out.println(df.i);
}
}
我得到的错误是:
aTyp0eName.java:18: incompatible types
found: void
required: int
df.i = t.increment();
df.i
是int
,t.increment
也是increment()
。我猜是因为void
是{{1}}?
答案 0 :(得分:4)
increment()
没有返回值。您需要让它返回int
才能使您的代码正常工作:
class incrementable {
static int increment() {
StaticTest.i++;
return StaticTest.i;
}
}
“void
”是为不返回任何值的方法保留的关键字。否则,您指定要返回的类或基元(int
,double
,String
,等等。您可以阅读有关返回值here的更多信息。
此外,为了将来参考,类名应该大写,因此您应该使用“可递增”而不是“可递增”。 (在我的示例代码中,我保持它与您的相同,因此您可以暂时删除代码。)
答案 1 :(得分:4)
您的方法签名是:
static void
这意味着此方法不会返回任何内容。
因此,尝试将increment()
分配给df.i
将无效。
答案 2 :(得分:2)
答案是increment()方法返回一个void。话虽如此,程序员通常使用的Java标准语法有很多违规行为,即:
编辑: 同一类中的辅助方法示例:
class StaticTest {
private static int i = 47; //keep i private and mutate and access via methods
public static void increment() { i++; }
public static int getI() { return i; }
}
答案 3 :(得分:2)
我得到的错误是:
aTyp0eName.java:18: incompatible types
found: void
required: int
df.i = t.increment();
df.i是一个int,因此是t.increment [fault?]。我猜是因为increment()是无效的?
Eeeexactly,你的猜测是正确的。
这是逐行解释的错误消息:
aTyp0eName.java:18: incompatible types
您正尝试将“void”分配给第18行中的int。
df.i = t.increment();
这是错误的地方。
found: void
您声明方法“signature”中的返回类型是什么。 方法签名是:
<access modifiers> <return type> <method name> (<parameters> ) static void increment ()
因此返回类型无效。
下一行:
required: int
df.i正如您之前所说的那样是int。
所以,几乎你已经回答了你自己的问题。
拥有编译器的好处在于它会在出现问题时告诉您。
对于人类而言,你必须学会阅读这些信息。它们从编程语言到另一种,甚至从编译器到编译器都有所不同。
这将是一个更正版本:
class StaticTest {
static int i = 47;
}
class Incrementable {
static int increment() {
return ++StaticTest.i;
}
}
class DataOnly {
int i;
double d;
boolean b;
public static void main (String[] args) {
Incrementable t = new Incrementable();
DataOnly df = new DataOnly();
df.i = t.increment();
System.out.println(df.i);
}
}
还可以进行一些其他增强,例如向方法和属性添加访问修饰符,但是现在我认为这会有所帮助。
答案 4 :(得分:0)
另外,如果实例化可递增,则不应将方法increment()定义为static。或者你可以,但不需要。
如果它是静态的,你可以简单地增量.increment()。
只是一个提示。至于你的问题的答案,工具包已经说得对了。
答案 5 :(得分:0)
此外,您的incrementable
课程应该是Incrementable
。