Java:无法获得增量值来打印。

时间:2009-04-21 19:23:26

标签: java string int println

我正在学习一些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.iintt.increment也是increment()。我猜是因为void是{{1}}?

6 个答案:

答案 0 :(得分:4)

increment()没有返回值。您需要让它返回int才能使您的代码正常工作:

class incrementable { 
    static int increment() { 
        StaticTest.i++;
        return StaticTest.i;
    } 
}

void”是为不返回任何值的方法保留的关键字。否则,您指定要返回的类或基元(intdoubleString,等等。您可以阅读有关返回值here的更多信息。

此外,为了将来参考,类名应该大写,因此您应该使用“可递增”而不是“可递增”。 (在我的示例代码中,我保持它与您的相同,因此您可以暂时删除代码。)

答案 1 :(得分:4)

您的方法签名是:

static void

这意味着此方法不会返回任何内容。

因此,尝试将increment()分配给df.i将无效。

答案 2 :(得分:2)

答案是increment()方法返回一个void。话虽如此,程序员通常使用的Java标准语法有很多违规行为,即:

  1. 班级名称应以大写字母开头。
  2. 字段不应该从不同的类中变异,而是辅助方法应该在同一个类中
  3. 如果要调用静态方法,请不要引用实例变量,而应使用ClassName.reference
  4. 如果只在本地需要变量,则它不应该是一个字段(df.i可能只是在main方法中声明的int)。
  5. 编辑: 同一类中的辅助方法示例:

    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