【发布时间】:2013-04-13 22:56:39
【问题描述】:
编程新手,Java 新手。我似乎了解类及其组件、方法等基本部分,但我不知道如何将它们组合在一起。例如,我正在按照教程并尝试编写一个类 Card,它可以根据构造期间传递的 args 成为任何卡片。
我的第一个问题是,如果我将类 Card 声明为 public(第 5 行),编译器会说非法的表达式开头。
如果我删除 public,它会继续 println 语句,它抱怨非静态变量不能从静态环境中引用。那是因为我在 main 方法中工作,它总是静态的,对吧?所以,我需要向 Card 添加方法来读取内部状态并将其提供给 println 语句,这样行吗?
public class Deck {
public static void main(String[] args) {
class Card {
public int rank;
public int suit;
public Card(int startSuit, int startRank) {
rank = startRank;
suit = startSuit;
}
}
Card aceOfSpades = new Card(1, 1);
System.out.println("Card is ..." + Card.rank + " of " + Card.suit);
}
}
第二轮 这是新代码,文件是 Card.java:
public class Card {
//declare states
//rank 1-13 for ace-king
//suit 1-4 spade,heart,club,diamond
public int rank;
public int suit;
//constructor
public Card(int startSuit, int startRank) {
rank = startRank;
suit = startSuit;
}
//methods for Card
public static void main(String[] args) {
//call Card constructor
//make card ace of spades (1,1)
Card aceOfSpades = new Card(1,1);
//read internal state of new Card object
//what kind of card is it?
System.out.println("Card is ..." + rank + " of " + suit);
}
}
我平衡了我的大括号,主要方法现在是 Card 类的一部分,我认为它看起来更好。 oney 编译错误现在与 println 语句中的变量相关联。 (非静态变量套装不能从静态上下文中引用。)我认为这意味着我必须编写像 getSuit() 和 getRank() 这样的方法来读取变量状态,然后在我的 println 中使用该方法而不是变量本身?
那个方法应该是这样的,对吧?
public int getSuit() {
return suit;
}
(请多多包涵,我的格式不完全正确,我会努力解决的)
【问题讨论】:
-
创建一个名为
Card.java的新文件并将您的Card类放入其中。 -
或者直接在Deck类中创建(不是在方法中!!)。
-
好的,我想通了。我正在制作卡片,但没有使用它。我应该引用 aceOfSpades.rank,而不是 Card.rank。对于面向对象的编程,它有助于实际制作/使用对象。未来的谷歌人——我最终将 getSuit() 和 getRank() 方法放在卡片中,就在 main 方法的上方。
-
同样的东西错误非静态访问。