方法练习2
1. 用户输入一个数,求对应数的阶乘(考虑数据延展性)
/*
1. 求15的阶乘
数据在运行过程中,演变过程,以及数据当前情况和储存数据类型是否能支持
15的阶乘 int 类型结果显然不对
要考虑数据的演变过程
尤其是数据在整个变化过程中,增长性极大
*/
/*
封装方法小技巧
1. 一框
找核心代码
2. 二看
上看找参数
找出核心代码块中未定义的变量,在核心代码之外定义,该变量就是方法参数
下看找返回
直接考虑删除核心代码,如果代码可以正常运行,正常编译,当前方法没有返回值,如果
已经不具备正常运行,正常编译情况,当前方法有返回值,注意必要数据的类型
3. 三封装
完成方法声明,剪切核心代码到方法体中,同时根据所需,补充 return 语句。如果没有返回值
无需补充。
正常使用,调用操作
方法分析:
参数:
(int num)
返回值类型:
double
方法名:
factorial
方法声明:
public static double factorial(int num)
*/
class Demo1 {
public static void main(String[] args) {
int num = 10;
double ret = factorial(num);
System.out.println(ret);
}
/**
* 计算用户指定数据的阶乘结果
*
* @param num 用户指定阶乘所需数据, int 类型
* @return 考虑数据的延展性和后期的拓展情况,返回值类型选择 double 类型
*/
public static double factorial (int num) {
double ret = 1;
for (int i = 1; i <= num; i++) {
ret *= i;
}
return ret;
}
}
2. 完成30位以内的斐波那契数列
1 1 2 3 5 8 13 21 34 55 89 144 ...
class Demo2 {
public static void main(String[] args) {
int count = 10;
fibonacci(count);
}
/**
* 根据用户指定的斐波那契数列的数据个数,展示斐波那契数列
*
* @param count 用户指定的数据个数
*/
public static void fibonacci(int count) {
double num1 = 1;
double num2 = 1;
System.out.println(num1);
System.out.println(num2);
for (int i = 1; i <= count; i++) {
// 保存当前 num2 存储数据
double temp = num2;
// 计算新数据内容
num2 += num1;
// 展示新数据情况
System.out.println(num2);
// num1 赋值为原本 num2 存储数据
num1 = temp;
}
}
}
3. 分解质因数
例如:
30 ==> 2 * 3 * 5
90 ==> 2 * 3 * 3 * 5
40 ==> 2 * 2 * 2 * 5
核心:
如果当前目标数据可以被某一个素数整除之后,需要再次确认当前素数是否可以继
续整除目标数据
素数作为循环变量
/*
分解质因数
例如:
30 ==> 2 * 3 * 5
90 ==> 2 * 3 * 3 * 5
40 ==> 2 * 2 * 2 * 5
核心:
如果当前目标数据可以被某一个素数整除之后,需要再
次确认当前素数是否可以继续整除目标数据
素数作为循环变量
素数/质数:除本身和1之外,不可以被其他整数整除
*/
class Demo3 {
public static void main(String[] args) {
int num = 90;
prime(num);
}
/**
* 分解用户指定数据对应质因数
*
* @param num 用户指定分解使用数据,为 int 类型
*/
public static void prime(int num) {
//for 循环控制分解质因数操作
for (int i = 2; i <= num; i++) {
//分解质因数成功
if (num % i == 0){
//展示质因数
System.out.println(i);
//num 存储数据除以当前质因数
num /= i;
/*
考虑到 for 循环第三个条件,不断的累加变量
如果当前 i 可以整除 num 存储数据,需要二次验证当前 i 对应数据
是否为 num 目前情况的质因数,【抵消】i++,if 大括号中进行 i--
*/
i--;
}
}
}
}
4.
*****
*****
*****
*****
*****
class Demo4 {
public static void main(String[] args) {
// 可以利用一个变量,控制循环中核心数据,增强代码的普适性
int line = 5;
pic1(line);
}
/**
* 根据用户指定的行数,展示正方形星星图案
*
* @param line 用户指定的总行数
*/
public static void pic1(int line) {
for (int i = 1; i <= line; i++) {
// for - j 控制每一行完成的任务 星星个数 ==> 总行数
for (int j = 1; j <= line; j++) {
System.out.print("*");
}
System.out.println(); // 无内容展示,单纯使用 println 换行能力
}
}
}
5.
*
**
***
****
*****
class Demo5 {
public static void main(String[] args) {
int line = 5;
pic2(line);
}
/**
* 根据用户指定的行数,展示一个等边直角三角形
*
* @param line 用户指定的总行数
*/
public static void pic2(int line) {
for (int i = 1; i <= line; i++) {
// for - j 循环。控制每一行的星星个数,每一行星星个数 ==> 循环变量当前 i 存储的数据
// i 值作为内层循环的执行次数
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
6.
*
***
*****
*******
*********
class Demo6 {
public static void main(String[] args) {
int line = 5;
pic3(line);
}
public static void pic3(int line) {
// for - i 控制总行数,目前总行数为 5
for (int i = 1; i <= line; i++) {
// for - j 控制每一行 空格 个数,总行数 - 当前是第几行
for (int j = 1; j <= line - i; j++) {
System.out.print(' ');
}
// for - k 控制每一行的星星个数,2 * 当前是第几行 - 1
for (int k = 1; k <= 2 * i - 1; k++) {
System.out.print('*');
}
System.out.println();
}
}
}