项,\\t值为:\ + Work2_13.getPai(Work2_13.getIndex(3.1415))); System.out.println(\是第\ + Work2_13.getIndex(3.14159) + \项,\\t值为:\ + Work2_13.getPai(Work2_13.getIndex(3.14159))); } /** * 根据给出的数值,得到需要计算多少项才能得到这个数值 * * @param p - 数值 * @return - 项数 */ public static double getIndex(double p) { int r = 1, num = 1000000; // 控制计算的项数,越高,越准确 double i = 1.0, pai = 0.0, t = 1.0; while (r < num) { pai = pai + (4.0 / i) * t; t = -t; i = i + 2; r++; if (pai >= p && pai <= (p + 0.000001)) break; } return r; } /** * 根据给出的数,按公式进行计算圆周率 * @param num - 公式项数 * @return 返回按公式计算出的圆周率 */ public static double getPai(double num) { int r = 1; double i = 1.0, pai = 0.0, t = 1.0; while (r < num) { pai = pai + (4.0 / i) * t; t = -t; i = i + 2; r++; } return pai; } }
2.14 回文整数是指正读法和反读相同的整数,编写一个程序,输入一个整数,判断他是否为回文整数。
程序运行结果:
11
import javax.swing.JOptionPane; /**
* 输入整数,判断是否是回文整数 * @author 段智敏 */
public class Work2_14 { private int number; public Work2_14() { number = getIntegerNumber(\输入一个正整数n\, 1);// 要求是>=1的整数 if (number < 0) return; if (isPalindrome(number)) showResult(\输入的正整数 “\ + number + \是回文数\); else showResult(\输入的正整数 “\ + number + \不是回文数\); } /** * 判断是否是回文数 * @param number - 需要判断的正整数 * @return 是回文数返回真,否则返回假 */ public boolean isPalindrome(int number) { int a[] = new int[100]; int i = 0; int test = number; while (test > 0) // 把整数的各个位上的数存到数组里 { a[i] = test % 10; test = test / 10; i++;// 累计整数位数 } for (int j = 0; j < i; j++) { if (a[j] != a[i - j - 1])// 有对应不相等的,肯定不是,直接跳出并附给b为false { return false; } } return true;// 如果一直相等,则if里边的语句不能被执行b的值是true } /** * 通过图形界面,得到符合规则的正整数的方法 * @param message - 在弹出的对话框中,显示提示信息message * @param min - 要求此数必须大于等于min * @return 返回符合规则的整数 */
12
public int getIntegerNumber(String message, int min) { String str = JOptionPane.showInputDialog(null, message, \提示信息\, JOptionPane.INFORMATION_MESSAGE); int number = -1; try { number = Integer.parseInt(str); // 得到输入的正整数 } catch( Exception e ) { JOptionPane.showMessageDialog(null, \输入非数字字符\\n程序结束\, \错误警告\, JOptionPane.ERROR_MESSAGE); return -1; // 输入的不是数字字符,程序结束 } if (number < min) { JOptionPane.showMessageDialog(null, \输入的数不符合规则,不是正整数\\n程序结束\, \错误警告\, JOptionPane.ERROR_MESSAGE); return -1; // 输入的数不是大于2的正整数时候,程序结束 } else return number; } /** * 弹出对话框,显示结果 * @param str - 需要显示的字符串 */ public void showResult(String str) { JOptionPane.showMessageDialog(null, str, \输出结果\, JOptionPane.INFORMATION_MESSAGE); } public static void main(String args[]) { new Work2_14(); } }
2.15 草地上有一堆野果,有一只猴子每天吃掉这堆野果的一半又一个,5天后刚好吃完这堆野果,求这堆野果原来共有多少个?猴子每天吃多少个野果?
程序运行结果:
源代码文件:Work2_15.java /**
* 猴子吃苹果问题 * @author 段智敏
13
*/
public class Work2_15 { public static void main(String args[]) { int i, j, test = 1; for (i = 1; i < 100000; i++) { test = i; for (j = 0; j < 5; j++) // 5天 { test = test / 2 - 1; } if (test == 0) // 5天后野果子数量为0,则满足要求 { System.out.println(\这堆野果原来共有\ + i + \个\); break; } } // 打印出猴子每天吃野果子的个数 int eat; test = i; for (j = 1; j <= 5; j++) { eat = test / 2 + 1; test = test / 2 - 1; System.out.println(\第\ + j + \天吃\ + eat + \个\); } }
}
14
第三章 面向对象编程基础
3.1 什么是面向对象技术?它有什么优点?
答:面向对象技术强调在软件开发过程中面向客观世界或问题域中的事物,采用人类在认识客观世界的过程中普遍运用的思维方法,直观、自然地描述客观世界中的有关事物。面向对象技术的基本特征主要有抽象性、封装性、继承性和多态性。
3.2 面向对象程序设计与面向过程程序设计有什么区别?
答:面向过程程序设计关注的是函数功能的实现;面向对象程序设计关注将函数和数据如何绑定到一个对象,通过对象的描述、对象间的关系、类的管理实现程序的功能。
3.3 程序中类和对象有什么区别?
答:类是一组对象共性的集合。类具有行为,它描述一个对象能够做什么以及做的方法,它们是可以对这个对象进行操作的程序和过程。
对象是类的一个实例,它代表一个现实物理“事件”。
3.4 类变量和实例变量,以及类方法和实例方法的区别。
加载类之前 创建对象之后 调用方法 访问权限 成实例变量 不分配内存 员变类变量 直接分配内存 量 各个对象之间各自分对象名.实例变量被实例方法,构造方配独立的内存空间 名 法访问 各个对象之间共享这对象名.类变量名;被实例方法,类方段已经分配完的内存 类名.类变量名 法,构造方法访问 对象名.实例方法实例变量、类变量,名 实例方法、类方法 对象名.类方法名;类变量、类方法 类名.类方法名 成实例方法 不分配入口地址 共享一个入口地址 员方直接分配入口地类方法 共享这个入口地址 法 址 3.5 子类能继承超类的哪些成员变量和方法?
私有(private) 友好(缺省默认) 受保护(protected) 共有(public) 15
同包继承 不继承 继承 继承 继承 不同包继承(import进来的) 不继承 不继承 继承 继承