以下是代码:
class Time {
public static void printTime (int hour, int minute) {
System.out.print (hour) ;
System.out.print (":") ;
System.out.print (minute) ;
}
public static void main (String[] args) {
hour = 11 ;
minute = 30 ;
printTime () ;
}
}
当我尝试编译时,这是终端所说的:
david-allenders-macbook-pro:~ davidallender$ Javac Time.java
Time.java:9: cannot find symbol
symbol : variable hour
location: class Time
hour = 11 ;
^
Time.java:10: cannot find symbol
symbol : variable minute
location: class Time
minute = 30 ;
^
Time.java:11: printTime(int,int) in Time cannot be applied to ()
printTime () ;
^
3 errors
david-allenders-macbook-pro:~ davidallender$
我正在学习,所以我真的不知道发生了什么。现在我在书中关于/ on / within / above / preposition(我不确定什么是正确的介词)方法的部分。
答案 0 :(得分:5)
参数提供了完成工作所需的方法信息。例如,找到数字的平方根的函数将该数字作为参数。
您需要传递参数以提供参数值。因此,您无需尝试在minute
方法中设置hour
和main
,而是需要调用
printTime(11, 30);
作为一种元评论,这是你很早就会学到的东西 - 虽然像这样的网站可以帮助你解决具体问题,但你最好还是阅读关于Java的入门级书籍。如果您已经在阅读一本书但没有清楚地描述参数,那么您可能想考虑另外一本书:)
答案 1 :(得分:2)
这应该更好:
class Time {
public static void printTime (int hour, int minute) {
System.out.print (hour) ;
System.out.print (":") ;
System.out.print (minute) ;
}
public static void main (String[] args) {
int hour = 11 ;
int minute = 30 ;
Time.printTime (hour, minute) ;
}
}
糟糕的格式化。帮自己一个忙,并仔细考虑如何格式化代码。对于像这样的小例子来说并不重要,但如果你的抱负和计划增长,你就需要它。
我可能这样写:
package cruft;
import java.text.DecimalFormat;
import java.text.NumberFormat;
public class Time
{
private static final NumberFormat DEFAULT_FORMAT = new DecimalFormat("00");
private static final int DEFAULT_CAPACITY = 8;
private static final char DEFAULT_DELIMITER = ':';
private final int hour;
private final int minute;
private final int second;
public Time()
{
this(0, 0, 0);
}
public Time(int hour)
{
this(hour, 0, 0);
}
public Time(int hour, int minute)
{
this(hour, minute, 0);
}
public Time(int hour, int minute, int second)
{
this.hour = hour;
this.minute = minute;
this.second = second;
}
public String toString()
{
StringBuilder builder = new StringBuilder(DEFAULT_CAPACITY);
builder.append(DEFAULT_FORMAT.format(hour))
.append(DEFAULT_DELIMITER)
.append(DEFAULT_FORMAT.format(minute))
.append(DEFAULT_DELIMITER)
.append(DEFAULT_FORMAT.format(second));
return builder.toString();
}
public static void main(String[] args)
{
Time time = new Time(11, 5);
System.out.println(time);
}
}
注意:一致的大括号放置,方法缩进等等。这就是我的意思。
答案 2 :(得分:1)
我认为你做错了一个主要的事情,应该特别指出的是你在没有定义类型的情况下声明参数。 Java以其静态冻结岩石类型系统而闻名,这意味着无论如何,您始终必须定义变量的类型。比较一下,在PHP中你可以用Java做$number = 1;
,而不能用。{/ p>
作为原型,每个变量/参数声明都遵循[type] [name] = [possible default value];
模式,例如int number = 1;
。有效类型是基元(int
,double
,byte
,char
等),当然也包括String
或Calendar
等对象你可能正在使用的课程。
相同的静态适用于调用方法,您需要为每个方法显式提供具有正确类型的精确数量的参数,以便能够调用它们。 Java会在适用的情况下自动将某些原始值(例如int
)转换为long
,但通常在Java中,您将使用实际对象,并且只有在适用时才会对其进行下载。您无法以与C / C ++ / PHP相同的方式自动为方法参数提供默认值,即您无法执行此操作
public void callMe(int number = 911) { ... }
但你必须这样做
public void callMe() { callMe(911); }
public void callMe(int number) { ... }
获得相同的效果。
当然,即使是最基本的规则也存在例外,例如静态和动态类型之间的差异,满足适当数量的参数和默认值的方法,但您可以暂时忘记这些并首先关注基础知识。希望这对你有帮助!