`
文章列表
插入排序算法J# 有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插 ...
package sort;import java.util.Random; public class SortTest {/*** 随即生成数组的方法 Random** @param args*/public int[] createArray() {Random random = new Random();int[] array = new int[1000];for (int i = 0; i < 1000; i++) {array[i] = random.nextInt(100) - random.nextInt(100);// 生成两个随机数相减,保证生成的数中有负数}Syste ...
另一种经典的交换排序是快速排序,快速排序的效率很高,但是空间复杂度较大,因为快速排序使用了递归,而递归的实现需要一个栈。快速排序的算法思想是:(假设数据存放在数组a[n]中)   1.如果待比较的数组长度为0或者1,则不用比较,直接返回。   2.如果待比较的数组长度大于1,则随机的选择一个中枢值(centrum),然后分别从数组的两端开始遍历,并且把从左边遍历找到的大于centrum的元素和从右边遍历找到的小于centrum的元素进行交换,直到数组遍历完毕(即:左边遍历指针指向的索引大于或等于右边遍历指针指向的索引)。   3.交换中枢元素和右边遍历指针指向的元素,这样原来的数组以中枢元 ...
开放封闭原则,是说软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。 对于扩展是开放的 对于修改是封闭的无论模块是多么的封闭,都会存在一些无法与之封闭的变化。既然不可能完全封闭,设计人员必须对于他设计的模块应该对哪种变化封闭做出选择。他必须先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化。 等到发生变化时立即采取行动。 在我们最初编写代码时,假设变化不会发生。当变化发生时,我们就创建抽象来隔离以后发生的同类变化。 面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。 我们希望的是在开发工作展开不久就知道可能发生的变化。查明可能发生的变化所等待的时间越 ...
单一职责原则SRP 就一个类而言,应该仅有一个引起它变化的原因。 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。 软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离ASD 如果你能够想到多余一个的动机去改变一个类,那么这个类就具有多余一个的职责,就应该考虑类的职责分离。
面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类。 收费对象生成工厂 策略模式strategy:它定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的用户。 商场收银时如何促销,用打折还是返利,其实都是一些算法,用工厂来生成算法对象,这没有错,但是算法本身只是一种策略,最重要的是这些算法是随时都可能互相替换的,这就是变化点,二封装变化点是我们面向对象的一种很重要的思维方式。 策略模式解析 策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现 ...
通过封装、继承、多态把程序的耦合度降低 用设计模式使得程序更加的灵活,容易修改,并且易于复用如果去实例化对象的问题,应该考虑用一个单独的类来做这个创造实例的过程,这就是工厂。 简单工厂:将实例化具体的对象的过程由客户端转移到工厂类中完成。 UML图、 继承类用空心三角形+实现表示 实现接口用空心三角形+虚线表示 当一个类知道另一个类时,可以用关联association,关联关系用实线箭头来表示。 聚合表示一种弱的拥有关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。聚合关系用空心的菱形+实线箭头来表示。 组合composition是一种强的拥有关系,体现了严格的 ...
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153
/** * * 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子 * 假如兔子都不死,问每个月的兔子总数为多少? * 斐波那契数列,没一个值都等于前两个值之和 * @author gKF46762 * */ public class Rabbit {public static void main(String[] args){ //getRabbit(24); //method1for(int i=1;i<=24;i++) //method2 推荐使用第二种方法{System.out.println(" ...
题目:判断101-200 之间有多少个素数,并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数 public class Sushu { public static void main(String[] args) {isSu(101,200);}public static void isSu(int begin, int end) {for (int i = begin; i <= end; i++) {boolean b = false;for (int j = 2; j < i; j++) ...
public class KuoHao {public static void main(String[] args) {System.out.println(isCorrect("a+((d+d)"));System.out.println(isCorrect("a*6-(c+d)"));}public static boolean isCorrect(String reg) {byte[] bytes = reg.getBytes();int left = 0;int right = 0;for (int i = 0; i < bytes.len ...
public class Duichengshu {public static void main(String[] args){Boolean isOK1 = isDCNumber(3);Boolean isOK2 = isDCNumber(2332);Boolean isOK3 = isDCNumber(34143);Boolean isOK4 = isDCNumber(341243);}public static boolean isDCNumber(int number){String numStr = String.valueOf(number);if(numStr.length()= ...
publicclassTest {
请编写程序打印下列图案: ********* *******   *****  *** * public class PrintStart { public static void main(String[] args) { int column = 9; for(int i=0;i<column for k=& ...
请编写程序打印下列图案: ********* *******   *****  *** * public class PrintStart {public static void main(String[] args){ int column = 9;for(int i=0;i<column;i++){for(int k=0;k<i;k ...
Global site tag (gtag.js) - Google Analytics