package cn.temptation;

 public class Sample01 {
public static void main(String[] args) {
// 1、需求:打印如下图形
/*
* * *
* * *
* * *
* * *
* *
* * *
* * *
* * *
* * *
*/ // 打印上部
for (int i = 0; i < 5; i++) {
// 打印空格
for (int j = 0; j < i; j++) {
System.out.print(" ");
} // 打印星号
System.out.print("*"); // 打印空格
for (int j = 0; j < 7 - i * 2; j++) {
System.out.print(" ");
} // 打印星号
if (i != 4) { // 第5行时不打印后面的星号
System.out.print("*");
} // 换行
System.out.println();
} // 打印下部
for (int i = 0; i < 4; i++) {
// 打印空格
for (int j = 0; j < 3 - i; j++) {
System.out.print(" ");
} // 打印星号
System.out.print("*"); // 打印空格
for (int j = 0; j < i * 2 + 1; j++) {
System.out.print(" ");
} // 打印星号
System.out.print("*"); // 换行
System.out.println();
}
}
}
 package cn.temptation;

 public class Sample02 {
public static void main(String[] args) {
// 2、需求:猴子第一天早上摘下若干个桃子,当即吃了一半,觉得不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
// 以后每天早上都多吃了前一天的一半零一个。到第10天早上再吃时,发现就剩下一个桃子了。求第一天共摘了多少个桃子。 // 思路:正向思维比较复杂时,可以考虑逆向思维,把第10天看成逆向的第1天,第9天看成逆向的第2天,... int count = 1; for (int i = 2; i <= 10; i++) {
count = (count + 1) * 2;
} System.out.println("第一天共摘了" + count + "个桃子");
}
}
 package cn.temptation;

 public class Sample03 {
public static void main(String[] args) {
// 3、需求:商店里篮球原价为78元一个,现在为了促销,推出了买5个送1个的活动,波波维奇需要35个球,问他需要花多少钱? // 单价
int price = 78;
// 购买的篮球数
int number = 1;
// 赠送的篮球数
int extendNumber = 0;
// 需求的篮球数
int totalNumber = 35; for(;;) {
// 买5个送1个,赠送的数量加在赠送的篮球数的变量上
if (number % 5 == 0) {
extendNumber++;
} // 购买的篮球数量 + 赠送的篮球数量 达到 需要的篮球数量,就跳出这个死循环
if (number + extendNumber >= totalNumber) {
break;
} number++;
} System.out.println("波波维奇需要35个球,问他需要花" + (number * price) + "元");
}
}
 package cn.temptation;

 public class Sample04 {
public static void main(String[] args) {
// 4、需求:网红开网店,工作日营业,休息日出去玩。工作日每天随机得到150~200元,休息日每天随机花费100~150元,问需要经过多少天,她才能存到5201314元
// (假设她是从某一个周一开始计算)
// 提示:随机数使用Math.random()方法 // 思路:
// 最终存下来的钱 = 赚的钱 - 花的钱
// (工作日) (休息日) // 1、研究随机数的产生
// Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
// 常用的成员方法:
// static double random() :返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。
// System.out.println(Math.random());
// 150 ~ 200 -----> 150 + 0 ~ 150 + 50 -----> 150 + Math.random() * 50
// 100 ~ 150 -----> 100 + 0 ~ 100 + 50 -----> 100 + Math.random() * 50
// System.out.println((int)(150 + Math.random() * 50));
// System.out.println((int)(100 + Math.random() * 50)); // 2、根据赚钱 和 花钱 的规则,明显要使用选择结构 // 3、研究工作日 和 休息日的判定
// 可以类比使用 %10 获取个位数字(因为那是十进制),这里一周七天(理解为七进制),所以可以通过 %7 获取是星期几 // 定义天数
int day = 1;
// 定义存的钱数
int totalMoney = 0; for(;;) {
// 随机賺的钱
int earnMoney = (int)(150 + Math.random() * 50);
// 随机花的钱
int payMoney = (int)(100 + Math.random() * 50); // 工作日 和 休息日 的业务逻辑
switch (day % 7) {
case 1:
case 2:
case 3:
case 4:
case 5:
// 工作日
totalMoney += earnMoney;
break;
case 6:
case 0:
totalMoney -= payMoney;
break;
default:
System.out.println("输入错误");
break;
} // 跳出死循环的条件
if (totalMoney >= 5201314) {
break;
} // 用时的天数需要自增
day++;
} System.out.println("需要经过" + day + "天,她才能存到5201314元");
}
}
 package cn.temptation;

 import java.util.Scanner;

 public class Sample05 {
public static void main(String[] args) {
// 5、需求:输入两个正整数,求其最大公约数 和 最小公倍数 // 思路:
// 最大公约数
// 1、对输入的两个正整数进行大小比较
// 2、用比较大的数除以比较小的数,如果两个数一样大,那么最大公约数就是其本身;
// 如果较大的数正好可以整除较小的数,那么最大公约数就是较小的数;
// 如果较大的数不能整除较小的数,将得到的余数作为新的较小的数,刚才的较小的数作为较大的数再去做除法,直到得到的余数为0为止 // 最小公倍数:两个数的乘积除以最大公约数 Scanner input = new Scanner(System.in);
System.out.println("输入第一个数:");
int i = input.nextInt();
System.out.println("输入第二个数:");
int j = input.nextInt();
input.close(); // 声明最大公约数
int gcd = 0; // 获取两个数的乘积(为了后续求最小公倍数时使用,否则后续这两个数字在循环中会发生改变)
int result = i * j; // 求最大公约数
// 1、对输入的两个正整数进行大小比较
if (i < j) {
int temp = i;
i = j;
j = temp;
} // 2、用比较大的数除以比较小的数,如果两个数一样大,那么最大公约数就是其本身;
// 如果较大的数正好可以整除较小的数,那么最大公约数就是较小的数;
// 如果较大的数不能整除较小的数,将得到的余数作为新的较小的数,刚才的较小的数作为较大的数再去做除法,直到得到的余数为0为止
// 注意:数学算式上 被除数 % 除数 = 商......余数 while (j != 0) {
if (i == j) {
gcd = i = j;
} else {
// 对于当次循环操作,被除数 % 除数
gcd = i % j;
// 下面两句实际上是为下次循环的操作来做准备的,即这次循环中的除数移到被除数的位置、余数移到除数的位置
i = j;
j = gcd;
}
} // 循环结束时,就是余数为0时,最大公约数不是放在gcd这个变量中的,而是在i这个变量中
gcd = i;
System.out.println("最大公约数为:" + gcd); System.out.println("最小公倍数为:" + result / gcd);
}
}
 package cn.temptation;

 import java.util.Scanner;

 public class Sample06 {
public static void main(String[] args) {
// 6、需求:编写程序,实现Fibonacci数列的求解
// 提示:Fibonacci数列 1、1、2、3、5、8、13、21、... // 思路:分析规律
// Fibonacci数列:第1项 和 第2项均为1;从第3项开始,值等于前面两项的和 // 写法1、常规写法(使用循环)
// 第3项 = 第2项 + 第1项
// 第4项 = 第3项 + 第2项 = (第2项 + 第1项) + 第2项
// 第5项 = 第4项 + 第3项 = ((第2项 + 第1项) + 第2项) + (第2项 + 第1项) // 写法2、使用递归
// 递归:方法调用自身的写法称为递归
// 从数学角度归纳公式
// F(1) = 1
// F(2) = 1
// F(n) = F(n - 1) + F(n - 2) (n > 2) // F(n) = F(n - 1) + F(n - 2) -----> F(n - 1) = F(n - 1 - 1) + F(n - 1 - 2), F(n - 2) = F(n - 2 - 1) + F(n - 2 - 2)
// ....... -----> F(3) = F(2) + F(1) = 1 + 1 // 逆向思考一下
// 位置 第一个位置 第二个位置
// F(3) F(2) + F(1)
// F(4) F(3) + F(2) Scanner input = new Scanner(System.in);
System.out.println("输入项数:");
int n = input.nextInt();
input.close(); System.out.println("该项的值为:" + Fibonacci(n)); // printFibonacci(n); System.out.println("该项的值为:" + FibonacciEx(n));
} /**
* 写法1、常规写法(使用循环)
* 获取Fibonacci数列指定项的值
* @param n:指定项数
* @return:Fibonacci数列指定项对应的值
*/
public static int Fibonacci(int n) {
// 第1项
int i = 1;
// 第2项
int j = 1;
// 定义当次结果
int tempResult = 0;
// 定义最终结果
int result = 0; if (n <= 2 && n > 0) {
result = i = j = 1;
} else {
// 使用循环来实现
for (int k = 3; k <= n; k++) {
// 计算出当次结果
tempResult = i + j;
// 为了给下一次循环使用,调整一下i位置上 和 j位置上的值
j = i;
i = tempResult;
} result = tempResult;
} return result;
} /**
* 写法1、常规写法(使用循环)
* 打印Fibonacci数列的指定项之前所有的值
* @param n
*/
public static void printFibonacci(int n) {
// 第1项
int i = 1;
// 第2项
int j = 1;
// 定义当次结果
int tempResult = 0; // 使用循环来实现
for (int k = 1; k <= n; k++) {
if (k <= 2 && k > 0) {
tempResult = i = j = 1;
System.out.print(tempResult + "\t");
} else {
// 计算出当次结果
tempResult = i + j;
System.out.print(tempResult + "\t");
// 为了给下一次循环使用,调整一下i位置上 和 j位置上的值
j = i;
i = tempResult;
}
}
} /**
* 写法2、创建递归方法
* @param n
* @return
*/
public static int FibonacciEx(int n) {
// 声明最终结果
int result = 0; if (n <= 2 && n > 0) {
result = 1;
} else {
result = FibonacciEx(n - 1) + FibonacciEx(n - 2);
} return result;
}
}

【原】Java学习笔记009 - 阶段测试的更多相关文章

  1. 【原】Java学习笔记013 - 阶段测试

    package cn.temptation; import java.util.Scanner; public class Sample01 { public static void main(Str ...

  2. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  3. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  4. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  5. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  6. 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类

    static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...

  7. 20145330第十周《Java学习笔记》

    20145330第十周<Java学习笔记> 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就 ...

  8. 20145330第九周《Java学习笔记》

    20145330第九周<Java学习笔记> 第十六章 整合数据库 JDBC入门 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JD ...

  9. Java学习笔记——动态代理

    所谓动态,也就是说这个东西是可变的,或者说不是一生下来就有的.提到动态就不得不说静态,静态代理,个人觉得是指一个代理在程序中是事先写好的,不能变的,就像上一篇"Java学习笔记——RMI&q ...

随机推荐

  1. mac连接windows远程桌面及文件复制

    最近更换mac办公,但由于之前是用windows,所以很多文件项目之类的东西都还在windows电脑中,一次都传到mac上又会比较占内存,并且使用率也不高,感觉不划算.但每次想用的时候,在从windo ...

  2. 利用Python爬去囧网福利(多线程、urllib、request)

    import os; import urllib.request; import re; import threading;# 多线程 from urllib.error import URLErro ...

  3. JAVA集合类兄妹List和Set

    List 接口及其实现类 有序集合,集合中每个元素都有其对应的顺序索引,类似数组,索引也是从 0 开始,可以根据元素的索引,来访问元素. List 集合允许添加相同的元素,因为它是通过下标来取值的,不 ...

  4. .NET Core2.1获取自定义配置文件信息

    前言 .net core来势已不可阻挡.既然挡不了,那我们就顺应它.了解它并学习它.今天我们就来看看和之前.net版本的配置文件读取方式有何异同,这里不在赘述.NET Core 基础知识. ps:更新 ...

  5. 【c#】RabbitMQ学习文档(四)Routing(路由)

    (使用Net客户端) 在上一个教程中,我们构建了一个简单的日志系统,我们能够向许多消息接受者广播发送日志消息. 在本教程中,我们将为其添加一项功能 ,这个功能是我们将只订阅消息的一个子集成为可能. 例 ...

  6. 微服务架构:Eureka参数配置项详解

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! Eureka涉及到的参数配置项数量众多,它的很多功能都是通过参数配置来实现的,了解这些参数的含义有助于我们更好的应用Eureka的各种功能 ...

  7. maven-代码风格检查工具

    目录 checkstyle findbugs pmd 其他 checkstyle checkstyle 用于对代码风格进行检查 checkstyle-maven插件 操作示例 mvn clean co ...

  8. PC逆向之代码还原技术,第二讲寻找程序入口点

    PC逆向之代码还原技术,第二讲寻找程序入口点 一丶简介 程序逆向的时候.我们需要知道程序入口点.动态分析的时候以便于看是什么程序编写的. 比如VC++6.0 我们可以写一个程序测试一下 我们写一段代码 ...

  9. IIS配置HTTPS

    1,新建网站,选中类型为 https,然后更改SSL证书为你配置的SSL证书, 对于SSL证书的配置是这样的 点开第二步,然后点击 创建自签名证书 确定以后点开网站看到有个SSL, 双击进去,再选中 ...

  10. Java 学习笔记 使用synchronized实现生产者消费者模式

    说明 Object.wait()使当前的线程进入到等待状态(进入到等待队列) Object.notifyAll() 唤醒等待中的全部线程 Object.notify() 随机唤醒一个线程 代码 con ...