什么是函数?
第5章 函数
5.1方法定义
- 修饰符
- 返回值类型
- 函数名
- 参数列表
- 函数体
5.2 方法调用
- 函数调用函数
- 函数递归调用
5.3实际参数和形式参数
- 实际参数
- 形式参数
- 参数传值
5.4 方法重载
- 方法重载的定义
- 方法重载的条件
- 方法重载的注意项
5.5变量的的作用域
- 局部变量
- 全局变量
5.6常用的数学函数
-
三角函数
-
指数函数
-
取整函数
-
min、max和abs方法
-
random方法
-
Random类
5.7 String相关函数
- 求字符串的长度
- 从字符串中获取字符
- 连接字符串
- 字符串的转换
public class Demo5_12 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
String str = "123";
int a = Integer.parseInt(str);
System.out.println(a);
}
}
- 从控制台读取字符串
- 从控制台读取字符
- 字符串比较
- 获取字符串中的字符或子串
本章小结
- 程序模块化和可重用性是软件工程的中心目标之一。Java提供了很多有助于完成这一目标的有效结构。方法就是这样的一个结构。
- 方法头指定方法的修饰符、返回值类型、方法名和参数。本章所有的方法都使用静态修饰符static。
- 参数列表是指方法中参数的类型、次序和数量。方法名和参数列表一起构成方法签名。参数是可选的,也就是说,一个方法可以不包含参数。
- return语句也可以用在void方法中,用来终止方法并返回到方法的调用者。在方法中,有时用于改变正常流程控制是很有用的。
- 传递给方法的实际参数应该与方法签名中的形式参数具有相同的数目、类型和顺序。
- 方法可以重载。这就意味着两个方法可以拥有相同的方法名,只要他们的方法参数列表不同即可。
- 在方法中声明的变量称作局部变量。局部变量的作用域是从声明它的地方开始,到包含这个变量的块结束为止。局部变量在使用前必须声明和初始化。
- 方法抽象是把方法的应用和实现分离。用户可以在不知道方法是如何实现的情况下去使用方法。方法的实现细节封装在方法内,对调用该方法的用户隐藏。这称为信息隐藏或封装。
- 当实现一个大型程序时,可以使用自顶向下或者自底向上的编码方法。不要一次性编写完整个程序。
编程练习题
import java.util.Scanner;
public class Demo5_1 {
/*
* 123%10 3
* 123/10 12
* 12%10 2
* 12/10 1
* 1%10 0
* 1/10
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个整数");
long n=sc.nextLong();
System.out.println(sumDigits(n));
}
private static int sumDigits(long n) {
// TODO 自动生成的方法存根
int sum=0;
while(true) {
sum+=(int) (n%10);
n/=10;
if(n/10==0) {
break;
}
}
return sum;
}
}
import java.util.Scanner;
public class Demo5_2 {
/*
* 121 %10 1 121/10 12 12%10 2 2/10 0 0%2 2
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数字");// 121
int num = sc.nextInt();
if(isPalindrome(num)) {
System.out.println("是回文");
}else {
System.out.println("不是回文");
}
}
public static int reverse(int number) {
String str = "";
int sum = 0;
while (true) {
str = str + number % 10;
number /= 10;
if (number / 10 == 0) {
str = str + number;
break;
}
}
return Integer.parseInt(str);
}
public static boolean isPalindrome(int number) {
return reverse(number) == number;
}
}
import java.util.Scanner;
public class Demo5_4 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner sc = new Scanner(System.in);
System.out.println("请输入三个数");
double num1 = sc.nextDouble();
double num2 = sc.nextDouble();
double num3 = sc.nextDouble();
diPlaySortNumber(num1, num2, num3);
}
private static void diPlaySortNumber(double num1, double num2, double num3) {
// TODO 自动生成的方法存根
double temp;
if (num1 > num2 && num1 > num3) {
temp = num3;
num3 = num1;
num1 = temp;
if (num1 > num2) {
temp = num2;
num2 = num1;
num1 = temp;
}
}
if (num2 > num1 && num2 > num3) {
temp = num3;
num3 = num2;
num2 = temp;
if (num1 > num2) {
temp = num2;
num2 = num1;
num1 = temp;
}
}
if (num3 > num2 && num3 > num1) {
if (num1 > num2) {
temp = num2;
num2 = num1;
num1 = temp;
}
}
System.out.print(num1 + "," + num2 + "," + num3);
}
}
public class Demo5_6 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
for (double i = 31.0; i <= 40.0; i++) {
System.out.print(i + ": " + cesiusToFahrenheit(i));
System.out.println();
}
}
private static double cesiusToFahrenheit(double i) {
// TODO 自动生成的方法存根
double Fahrenheit = (9.0 / 5) * i + 32;
return Fahrenheit;
}
}
import java.util.Scanner;
public class Demo5_8 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner sc = new Scanner(System.in);
System.out.println("请输入n");
int n = sc.nextInt();
for (int i = 1; i <= n; i++) {
System.out.printf("%4d: %8.4f", i, m(i));
System.out.println();
}
}
private static double m(int i) {
// TODO 自动生成的方法存根
double sum = 0;
for (int j = 1; j <= i; j++) {
sum += (j * 1.0) / (j + 1);
}
return sum;
}
}
import java.util.Scanner;
public class Demo5_9 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
for (int i = 1; i <= 901; i = i + 100) {
System.out.printf("%4d:%.4f", i, m(i));
System.out.println();
}
}
private static double m(int i) {
// TODO 自动生成的方法存根
double sum = 0.0;
double flag = 1.0;
for (int j = 1; j <= i; j++) {
sum += flag / (2 * j - 1);
flag = -flag;
}
return 4 * sum;
}
}
import java.util.Random;
import java.util.Scanner;
public class Demo5_10 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner sc = new Scanner(System.in);
System.out.println("请输入n");
int n = sc.nextInt();
print(n);
}
private static void print(int n) {
// TODO 自动生成的方法存根
Random random = new Random();
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
System.out.print(random.nextInt(2) + " ");
}
System.out.println();
}
}
}
import java.util.Scanner;
public class Demo5_11 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个密码");
String str = sc.nextLine();
boolean condition1 = leastContainEight(str);
boolean condition2 = containNumAndWorld(str);
boolean condition3 = leasContainTwoNum(str);
if (condition1 && condition2 && condition3) {
System.out.println("有效密码");
} else {
System.out.println("格式错误");
}
}
private static boolean leasContainTwoNum(String str) {
// TODO 自动生成的方法存根
return jisuanNum(str) > 2;
}
private static int jisuanNum(String str) {
// TODO 自动生成的方法存根
int count = 0;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (isNum(c)) {
count++;
}
}
return count;
}
private static boolean containNumAndWorld(String str) {
// TODO 自动生成的方法存根
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (!(isNum(c) || isWorld(c))) {
return false;
}
}
return true;
}
private static boolean isWorld(char c) {
// TODO 自动生成的方法存根
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
}
private static boolean isNum(char c) {
// TODO 自动生成的方法存根
return c >= '0' && c <= '9';
}
private static boolean leastContainEight(String str) {
// TODO 自动生成的方法存根
return str.length() >= 8;
}
}
package lianxi;
public class Demo5_20 {
/*
* 1.计算两个骰子的和
* 2.如果骰子的和为2、3、12
* lose
* 3.如果骰子的和为7、11
* win
* -----第二步和第三步执行一次------
* 4.如果和为4、5、6、8、9、10
* 4.1继续
* 4.2如果和为7 lose
* 4.3如果和与上次的和相等 win
* 否则 继续 第四步以后的循环 直到满足条件后退出
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
boolean flag=true;
int lastsum=0;
while(true) {
int a=(int) (Math.random()*7);
int b=(int) (Math.random()*7);
int sum=a+b;
if(flag) {
if(sum==2||sum==3||sum==12) {
System.out.println("你摇的点数和为"+a+"+"+b+"="+sum);
System.out.println("你输了");
break;
}else if(sum==7||sum==11) {
System.out.println("你摇的点数和为"+a+"+"+b+"="+sum);
System.out.println("你赢了");
break;
}else {
System.out.println("你摇的值是"+sum+",不符合输赢规则,请继续!");
lastsum=sum;
flag=false;
}
}else {
if(sum==7) {
System.out.println("你摇的点数和为"+a+"+"+b+"="+sum);
System.out.println("你输了");
break;
}else if(sum==lastsum){
System.out.println("你摇的点数和为"+a+"+"+b+"="+sum);
System.out.println("你赢了");
break;
}else {
System.out.println("你摇的值是"+sum+",不符合输赢规则,请继续!");
lastsum=sum;
}
}
}
}
}