2. 设计一个函数, 接受一个点和一个字符串作为参数,点表示一个玩家所在的坐标,字符串可能包括 wasd, w 表示玩家向前移动 (纵坐标 +1), s 表示玩家向后移动, a 表示玩家向左移动 (横坐标 -1), d 表示玩家向右移动, 如果字符串中出现非 wasd 的字符, 则抛出一个异常,玩家一轮之多只能移动八次, 如果超出, 也抛出异常, 然后让用户重新输入。返回值: 一个点, 表示该玩家移动后的坐标
public class ParseInt {
public static Point move(Point start, String input) { // 可重入性,无论该方法在运行过程中抛出何种异常,程序的状态不应该发生改变
if (input.length() > 8) {
throw new RuntimeException();
}
int x = start.getX();
int y = start.getY();
for (int i = 0; i < input.length(); ++i) {
char ch = input.charAt(i);
switch (ch) {
case 'w':
++y;
break;
case 's':
--y;
break;
case 'a':
--x;
break;
case 'd':
++x;
break;
default:
throw new RuntimeException(input + ":" + ch);
}
}
return new Point(x, y);
}
public static void main(String[] args) {
Point start = new Point(0, 0);
Scanner in = new Scanner(System.in);
while (true) {
try {
Point end = move(start, in.nextLine());
System.out.println(end.getX() + ", " + end.getY());
break;
} catch (RuntimeException e) {
System.out.println("Invalid input, not moved. Please input again.");
System.out.println(start.getX() + ", " + start.getY());
}
}
}
}
class Point {
private int x = 0;
private int y = 0;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public void translate(int deltaX, int deltaY) {
this.x += deltaX;
this.y += deltaY;
}
}
分享到:
相关推荐
如果字符串长度大于2,则将其设为null,并在catch块中捕获NullPointerException异常。这个示例还展示了如何在方法声明中使用throws关键字声明该方法可能抛出的异常。 通过对这些程序的分析,可以了解到Java中异常...
java异常处理例题代码文 java异常处理是java编程语言中非常重要的一部分,java异常处理机制可以使程序更加robust和可靠。在本文中,我们将通过五个例子来展示java异常处理的知识点。 java异常处理的概念 java异常...
2、catch:程序通过异常处理程序捕获异常。catch 关键字表示异常的捕获。 3、finally:finally 块用于执行给定的语句,不管异常是否被抛出都会执行。 例如如果你打开一个文件,不管是否出现异常文件都
异常处理是Java编程中不可或缺的一部分,通过例题,你将学会如何使用try-catch-finally语句块来捕获和处理运行时错误,以增强程序的健壮性。 对于更高级的主题,如多线程和网络编程,例题可以帮助你理解并发执行的...
《Java2程序设计实用教程(第2版)》是一本深受程序员欢迎的Java学习书籍,其例题部分包含了丰富的编程实例,旨在帮助读者巩固基础知识,提升编程技能。这些例题覆盖了Java语言的核心概念,包括但不限于语法、面向对象...
例题可能会设计出需要捕获和处理异常的场景,教导开发者如何使用try-catch-finally语句块。 4. **集合框架**:Java集合框架包括ArrayList、LinkedList、HashMap等,是存储和操作数据的重要工具。例题可能涵盖如何...
5. **第六章例题**:可能涵盖了异常处理,如try-catch-finally结构,不同类型的异常,以及自定义异常的创建。 6. **第七章例题**:可能涉及面向对象的高级主题,如接口、内部类、抽象类以及集合框架的初步接触,如...
2. **数组与集合** - 数组:理解一维、二维数组以及多维数组的概念和操作。 - 集合类:List、ArrayList、HashSet等集合的使用和操作,如添加、删除、查找元素。 3. **字符串处理** - 字符串操作:学习字符串的...
2. 编译执行:动手将代码输入到编译器中,运行并观察结果,这样可以加深理解,同时检查代码的正确性。 3. 修改调试:尝试修改例题代码,看看变化如何影响程序行为,这有助于掌握各种情况的处理。 4. 解答习题:...
例题可能会设计到如何正确抛出和捕获异常,以保证程序的健壮性。 4. **集合框架**:Java集合框架包括List、Set、Map等接口及其实现类,如ArrayList、LinkedList、HashSet、HashMap等。通过例题,可以学习如何存储和...
2. **面向对象编程**:Java的核心特性是面向对象,因此例题会涵盖类、对象、封装、继承和多态性。理解类的构造器、访问修饰符以及如何创建和使用对象至关重要。 3. **异常处理**:Java有强大的异常处理机制,通过...
C++是一种广泛应用于系统...无论是对基本语法的巩固,还是对面向对象编程、模板、异常处理和文件操作的理解,这套例题都将提供宝贵的实践机会。不断挑战自己,通过解题深化理解,是成为一名优秀的C++开发者的关键步骤。
2. ** chap03 **:这一章可能涉及到面向对象编程的基础,如类的定义、对象的创建、封装、继承和多态性。你可能会看到如何定义类,使用构造函数,以及理解super关键字和this关键字的应用。 3. ** chap05 **:在这个...
2. **函数**:C++中的函数是代码的重用单元,包括函数定义、函数调用、参数传递等。 3. **指针**:C++的指针是其强大之处,它允许直接操作内存地址,实现动态内存分配和数据结构的高效实现。 4. **类与对象**:C++...
9. **异常处理**:C++的异常处理机制(try、catch、throw)用于处理运行时错误,是编写健壮代码的重要工具。 10. **预处理器宏**:预处理器(#include、#define等)用于处理源代码的预编译阶段,例如包含头文件,...
2. **类与对象**: C++的核心是面向对象编程,通过类定义数据结构和行为。在例题中,你会看到如何声明类、创建对象以及实现封装、继承和多态性。 3. **函数与重载**: C++中的函数用于组织代码和执行特定任务。源代码...