Java是一种面向对象的语言,这意味着该语言中最有用的工作是通过调用对象上的方法来完成的。我们已经看到了一个使用Scanner对象从用户获取输入的对象和方法的例子:
扫描器输入=新的扫描器(System.in);system . out。print(“输入一个整数:”);int = input.nextInt();
这里有两件事很重要:我们必须创建一个Scanner对象并将其存储在一个变量(输入)中,我们必须在该对象上调用一个方法(nextInt)来从用户读取一些输入。
我们在上面的例子中调用的nextInt方法是最常见的一种方法。除了普通方法之外,Java还提供静态方法。这些方法属于特定的类,但不会在对象上调用。相反,这些方法是通过特殊语法调用的:
<类名>。<名称>()方法
例如,Java类库包含一个Math类,它为标准数学函数提供了许多静态方法。下面是一个例子:
双y = Math.sqrt(2);// y =√2
下面列出了Math类中可用的一些静态方法。
请注意,赢博体育的三角方法都使用弧度,而不是角度。
Java语言中的字符串也是对象,但它们有点不同寻常,因为它们可以像int型和double型一样从字面值创建,并且它们还支持单个操作符,即连接操作符+。
从文字值初始化一些整型数,然后将它们相加,看起来像
Int a = 2;Int b = 3;Int c = a + b;
类似地,从字符串字面量初始化字符串,然后将它们连接起来,看起来像
字符串a = "Hello, ";字符串b = "world!";字符串c = a + b;
由于string实际上是对象,因此它们支持许多有用的方法。例如,要计算字符串的长度,你可以使用length()方法:
String str = “这里是一些文本” int numChars = str.length();
要检查两个字符串是否相等,请使用equals()方法:
扫描器输入=新的扫描器(System.in);字符串响应;system . out。print(“输入yes继续,no退出:”);Response = input.next();if(response.equals("yes")){//做更多的事情…}
因为equals()方法需要精确相等,包括大小写,所以您可能会发现使用替代的equalsIgnoreCase()方法更加灵活和方便:
if(response.equalsIgnoreCase("yes")){//做更多的事情…}
重要警告要比较字符串,必须使用equals()或equalsIgnoreCase()。使用==将不能正常工作,即使编译器可能会让您尝试使用它。
if(response == "yes") //警告!!不工作!!
有时您会遇到需要将数字类型转换为文本或从文本转换。Java提供了许多技术来实现这一点。
将数字类型转换为文本的最常用方法是使用文本连接。最常见的情况是,当您想要打印数值变量的值以及一些解释性文本时,会发生这种情况。下面是一个典型的例子:
double y = Math.sin(1.5);System.out.println("sin(1.5) = " + y);
任何时候将数值变量与String连接时,作为连接过程的一部分,数值变量都会自动为您转换为文本。
第二种将数字类型转换为文本的方法是使用静态字符串方法valueOf():
Int n = 100;字符串textForm = String. valueof (n);Double x = 12.5;textForm = String.valueOf(x);
您不需要经常将String数据转换为数字类型,因为在大多数情况下,当我们需要在程序中处理数字时,我们将依赖于Scanner类将数字读取为数字。下面是一个典型的例子:
扫描器输入=新的扫描器(System.in);system . out。print(“输入一个整型和双精度:”);int n = input.nextInt();double x = input.nextDouble();
在极少数情况下,您会发现需要将某些文本重新解释为数字。要将string转换为数值,可以使用Integer类或Double类中的静态解析方法:
字符串示例= "100";int n = Integer.parseInt(示例);Example = "12.5";double x = double . parseint(示例);
我们将在示例中不时使用的另一个Java类是Random类。这个类的目的是生成随机数。Random类有一个nextInt(bound)方法,它生成一个介于0和bound - 1之间的随机整数。下面是一个演示如何生成1到100之间的随机整数的示例:
随机rnd = new Random();//创建一个随机对象int = rnd.nextInt(100) + 1;// rand . nextint(100)产生一个0到99之间的随机整数。// n现在是1到100之间的随机数。
要在程序中使用Random类,我们需要包含一个import语句:
进口java.util.Random;
接下来,我将构建一个程序来玩纸牌游戏21的简化版本——我已经简化了21的规则,以便更容易构建一个程序来玩这个游戏。
下面是这个简化游戏的规则:
以下是我们将在这个项目中使用的一些关键思想:
为了让我们开始,这里有一些代码来随机处理一张牌,并为这张牌计算一个点值和一个数字:
Int卡,分;字符串名称;随机rnd = new Random();//随机发牌card = rnd.nextInt(13) + 1;//计算纸牌值多少点数如果(card >= 10){点数= 10;} else{点数=卡片;} //确定牌的名称如果(card == 1) {name = "Ace";} else if (card == 11) {name = "Jack";} else if (card == 12) {name = " q ";} else if (card == 13) {name = "King";} else {name = String.valueOf(card);}
尽管处理一张纸牌的逻辑相当简单,但我们也必须考虑到在游戏中我们必须处理6张不同纸牌的事实:发牌者最多可以得到3张纸牌,玩家最多可以得到3张纸牌。由于我们将不得不处理多达6张不同的卡牌,因此我们可能需要多达6*3 = 18个不同的变量来存储有关赢博体育卡牌的信息。我们可以减少所需变量的总数,因为我们不需要知道每张卡片的积分值:我们只需要追踪每个玩家在游戏中每个点的总积分。为了做到这一点,我们将只使用两个变量
int playerPoints, dealerPoints;
一旦我们给每个玩家发了两张牌并计算了每个玩家的总得分,我们就可以编写一些逻辑来确定游戏是在第一轮结束还是继续到第二轮:
如果(dealerPoints > 17 && playerPoints > 17){系统。两家公司都破产了。比赛以平局告终。”} else if (dealerPoints bbb17) {System.out。println(“经销商萧条。你赢了。”);}如果(playerPoints > 17){系统。你已经破产了。你输了。”);} else {// Play进入第二轮…}
如果我们进入第二轮,第二轮要做的第一件事就是问玩家是否要第三张牌。这样做的代码看起来像这样:
system . out。你想做什么,打还是留下?”);字符串playerChoice = input.next();if (playerChoice.equalsIgnoreCase("hit")){//向玩家发第三张牌//将第三张牌的点数加到玩家的总点数中}
在玩家走完步后,发牌人必须决定是否拿第三张牌。下面是这样做的逻辑:
if ((playerPoints <= 17) && (dealerPoints < 14 || dealerPoints < playerPoints)){//发牌人拿第三张牌}
最后,下面是决定第二轮结束时谁赢谁输的逻辑:
如果(playerPoints > 17){系统。你已经破产了。你输了。”);} else if (dealerPoints bbb17) {System.out。println(“经销商萧条。你赢了。”);} else {System.out。println(“发牌者有“+ dealerPoints +”,你有“+ playerPoints +”);如果(dealerPoints > playerPoints){系统。println(“发牌者以点数取胜”);} else if (dealerPoints == playerPoints) {System.out。println(“游戏以点数平手”);} else {System.out。println(“你赢在分数上。”);}}
这是一个NetBeans项目,它实现了完整的游戏。