21xrx.com
2024-11-22 16:33:47 Friday
登录
文章检索 我的文章 写文章
最近在学习Java面向对象编程
2023-06-19 13:34:08 深夜i     --     --

最近在学习Java面向对象编程,想分享一些有趣的编程题目和解题思路。下面给大家列举三个例子:

1. 编写一个学生成绩管理程序,要求能够添加学生信息、查询某个学生的成绩、修改学生的成绩、删除学生信息等功能。其中学生信息包括学号、姓名、语文、数学、英语三门成绩。对于成绩的输入和输出,可以使用控制台或者文件。

这个题目主要考察对于面向对象的设计和封装的理解。我建议使用一个Student类来表示一个学生的信息,使用一个Grade类来表示一个班级的成绩信息,使用一个Score类来表示一个学生的分数。这样,添加学生和删除学生信息的功能可以在Grade类中实现,查询和修改学生信息可以在Student类中实现。

2. 实现一个简单的计算器程序,要求支持加减乘除四种基本操作,并且可以使用括号改变优先级。例如,输入"2+(3-1)*5/2",程序应该输出"9.0"。

这个题目主要考察对于递归和栈的理解。我建议使用一个Stack数据结构来存储待计算的数和操作符,并且使用递归来实现计算表达式的值。具体实现可以参考下面的代码:


public class Calculator {

  public static double calculate(String expression) {

    Stack nums = new Stack<>();

    Stack operators = new Stack<>();

    

    int i = 0;

    while (i < expression.length()) {

      char ch = expression.charAt(i);

      if (Character.isDigit(ch)) {

        int j = i;

        while (j < expression.length() && Character.isDigit(expression.charAt(j))) {

          j++;

        }

        nums.push(Double.parseDouble(expression.substring(i, j)));

        i = j;

      }

      else if (ch == '+' || ch == '-' || ch == '*' || ch == '/') {

        while (!operators.isEmpty() && priority(ch) <= priority(operators.peek())) {

          double num2 = nums.pop();

          double num1 = nums.pop();

          char operator = operators.pop();

          nums.push(calculate(num1, num2, operator));

        }

        operators.push(ch);

        i++;

      }

      else if (ch == '(') {

        int j = i + 1;

        int count = 1;

        while (j < expression.length() && count > 0) {

          if (expression.charAt(j) == '(') {

            count++;

          }

          else if (expression.charAt(j) == ')')

            count--;

          

          j++;

        }

        nums.push(calculate(expression.substring(i+1, j-1)));

        i = j;

      }

      else {

        i++;

      }

    }

    while (!operators.isEmpty()) {

      double num2 = nums.pop();

      double num1 = nums.pop();

      char operator = operators.pop();

      nums.push(calculate(num1, num2, operator));

    }

    return nums.pop();

  }

  

  private static int priority(char operator) {

    if (operator == '+' || operator == '-')

      return 1;

    

    else

      return 2;

    

  }

  

  private static double calculate(double num1, double num2, char operator) {

    switch (operator) {

      case '+': return num1 + num2;

      case '-': return num1 - num2;

      case '*': return num1 * num2;

      case '/': return num1 / num2;

      default: return 0.0;

    }

  }

}

3. 编写一个简单的猜数字游戏,程序随机生成一个1到100之间的整数,用户可以输入自己猜的数字,程序会提示猜的数字是太大还是太小,直到用户猜中为止。要求程序还支持多人游戏,可以记录每一个玩家耗费的时间和猜的次数。

这个题目主要考察对于面向对象的多态和继承的理解。我建议使用一个Game接口来定义游戏的通用方法,使用一个GuessNumber类来实现猜数字游戏的方法,使用一个Player类来表示玩家的信息。GuessNumber类继承Game接口并且实现Game的方法,Player类则实现记录玩家信息的方法。

以上三个例子都是Java面向对象编程的经典题目,涵盖了面向对象设计、递归和栈、继承和多态等多个方面。希望大家都能够喜欢并且从中受益。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复