目录
函数(function)
什么是函数
函数:为了解决某一特定问题,具有名称的代码集合。函数也就是现实中的一种行为动作
java 如何定义函数
访问修饰符 函数返回值的类型| void 函数名称([参数列表]) {
//函数体
//return 返回值;
}
Java中函数是属于类的!!必须定义在类中,所以说函数是类成员
先把函数都定义为静态函数,等学习了面向对象在定义常规函数
函数的调用
函数是无法自己执行的!!必须通过调用才可以执行!!
函数名称([参数列表]);
java中静态方法没有办法直接调用非静态方法,只能调用静态方法
函数的分类
- 有没有参数
-有参函数
-无参函数
class ClassRoom01{
public static void main(String[] args){
showInfo("张三",23,'女');//有参数的函数,使用时必须传递对应的参数
showInfo("里斯",22,'男');
}
public static void showInfo(String name,int age, char gender){
System.out.println("我的名字叫:"+name);
System.out.println("我的年龄:"+age);
System.out.println("我的性别:"+gender);
}
}
- 有没有返回值
-有返回值的函数
-无返回值的函数
class ClassRoom02 {
public static void main(String[] args) {
//将函数的返回值使用变量接受
int a = add(5,8);
System.out.println("8+5="+a);
}
public static int add(int x,int y){
return x+y;
//函数中,如果遇到return关键字,函数立刻返回
}
}
- 定义者
-系统函数
-第三者
-自定义函数
局部变量
局部变量(本地变量):定义在函数中的变量叫做局部变量
函数在内存中调用的本质
详情见这位大佬笔记
以前的作业题用函数解决
函数重载(overload)
- 什么是函数重载:函数名称相同,函数的参数的个数或者类型不同,调用的时候,自动匹配对应的函数
- 面试题:请简述overload(函数重载)override(覆盖)overwrite(重写)
- 思考题:函数重载是所有编程语言都有的吗?
函数重载现象是强数据类型语言(Java、C 、C++、C#)所特有的现象,弱数据类型语言(javascript、python、ruby)是不具备函数重载
函数递归(recursion)
-
什么叫做递归:函数自身调用自身
-
求1~n的和
-
递归时的内存模型
-优点:分治理念的体现,可以把非常复杂的问题简单解决
-缺点:非常消耗内存,所有说当栈被全部占用后,触发StackOverflowError异常!!!
-注意:
可以使用java -X -Xss<大小>,来调整JVM的栈大小空间
可以使用java -X -Xms<大小>,来设置初始Java堆大小
可以使用java -X -Xmx<大小>,来设置最大Java堆大小 -
第一题:求第n项斐波那契数列的值?
从第三个值开始,每个值是前两个值之和
0 、1、1、2、3、5、8、13、21、34…
1、1、2、3、5、8、13、21、34、55…
1、2、3、5、8、13、21、34、55 、89…
-
第二题
上楼梯问题:某个人上楼梯,每次只能上一个台阶或者两个台阶,那么当这个人到达第n个台阶时,共有多少种走法?
方法1:画图找规律,发现是斐波拉契数列
方法2:考验逻辑思考能力
假如求到达第10层有多少种方法就是求到第9层的方法加到第8层的方法之和
-
第三题
买了一对刚刚出生的兔子,过了四个月称为成年兔子,成年兔子没一个月生一对小兔子,问第n个月,共有多少对兔子(不考虑兔子死亡的可能性)
查询Java的帮助文档
随机数的使用
Math类
Random类
java中的字符串对象
-
在java中,被双引号,引用的内容就叫做字符串
-
字符串在Java中不是基本数据类型,是对象,是引用数据类型
-
final修饰的,字符串是常量,它们的值不能被创建后改变。支持可变字符串字符串缓冲区。因为字符串对象是不可改变的,所以它们可以被共享
Scanner常见的Java类
作业题讲解
- 第一题
求第n项斐波那契数列的值?
(斐波那契数列:1 1 2 3 5 8 13 21 34 55 89 …)
// 求第n项斐波那契数列的值?
//(斐波那契数列:1 1 2 3 5 8 13 21 34 55 89 ....)
import java.util.Scanner;
public class Test01 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入第n项的值:");
int num=sc.nextInt();
System.out.println("第n项的值为:"+number(num));
}
public static int number(int num){
if(num<=2){
return 1;
}else if(num==3){
return 2;
}else {
return number(num-2)+number(num-1);
}
}
}
- 第二题
上楼梯问题:某个人上楼梯,每次只能上一个台阶或者两个台阶,
那么当这个人到达第n个台阶时,共有多少种走法?
//上楼梯问题:某个人上楼梯,每次只能上一个台阶或者两个台阶,
//那么当这个人到达第n个台阶时,共有多少种走法?
import java.util.Scanner;
public class Test02 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入台阶的数量:");
int num=sc.nextInt();
System.out.println("走台阶的数量方法有:"+number(num));
}
public static int number(int num){
if(num<=2){
return num;
}else {
return number(num-2)+number(num-1);
}
}
}
- 第三题
买了一对刚刚出生的兔子,过了四个月被称为成年兔子,成年兔子,每一个生出一对小兔子,问第n个月,共有多少对兔子(不考虑兔子死亡问题)
//买了一对刚刚出生的兔子,过了四个月被称为成年兔子,成年兔子,每一个生出一对小兔子,问第n个月,共有多少对兔子(不考虑兔子死亡问题)
import java.util.Scanner;
public class Test03 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入月份:");
int num=sc.nextInt();
System.out.println("问第"+num+"个月,共有"+getRabbitCount(num)+"对兔子:");
}
public static int getRabbitCount(int num) {
if(num <= 4) {
//判断几个月生一胎
return 1;
}
return getRabbitCount(num - 1) + getRabbitCount(num - 4);
}
}
- 第四题
根据完整的路径从路径中分离文件路径、文件名及扩展名
(传递一个路径 c://a//b//c.avi,返回该文件的后缀名)
public class Test04{
public static void main(String[] args){
getSuffix("d://a/b/c/d.avi");
}
public static String getSuffix(String path){
String[] arrs = path.split("\\.");
//System.out.println(arrs);数组不能这样打印
return null;
}
}
public class Test04{
public static void main(String[] args){
getSuffix("d://a/b/c/d.avi");
}
public static String getSuffix(String path){
String[] arrs = path.split("\\.");
//System.out.println(arrs);数组不能这样打印
for (int i=0;i<arrs.length ;i++ ){
System.out.println(arrs[i]);
}
return null;
}
}
import java.util.Scanner;
public class Test04{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.print("请输入路径");
String url = input.next();
System .out.println(getSuffix(url));
//getSuffix("d://a/b/c/d.avi");
}
public static String getSuffix(String path){
//第一个方案
//String[] arrs = path.split("\\.");
//return arrs[arrs.length-1];
//第二种方案
//System.out.println(path.indexOf("."));
return path.substring(path.indexOf(".")+1);
}
}
public class Test04{
public static void main(String[] args){
String suffix = getSuffix("d://a/b/c/d.avi");
System.out.println(suffix);
}
public static String getSuffix(String path){
return path.substring(path.indexOf(".")+1);
}
}
前面都是文件夹只有一个点的,如果有多个点则最后一个点切
public class Test04{
public static void main(String[] args){
String suffix = getSuffix("d://a/b.ba/c.c/d.avi");
System.out.println(suffix);
}
public static String getSuffix(String path){
return path.substring(path.indexOf(".")+1);
}
}
注:结果会出错
public class Test04{
public static void main(String[] args){
String suffix = getSuffix("d://a/b.ba/c.c/d.avi");
System.out.println(suffix);
}
public static String getSuffix(String path){
return path.substring(path.lastIndexOf(".")+1);
}
}
- 第五题
输入一个字符串,判断该字符串是否是回文字符串(面试题)
(123454321)
import java.util.Scanner;
public class Test05{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.print("请输入字符串,判断是否是回文字符串:");
String url = input.next();
System.out.println(isPalindrome(url));
}
public static boolean isPalindrome(String str){
for(int i = 0;i < str.length() /2;i++){
if(str.charAt(i) != str.charAt(str.length()-1-i)){
return false;
}
}
return true;
}
}
- 第六题
去掉字符串中的所有空格
import java.util.Scanner;
public class Test06{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.print("请输入字符串,去掉空格:");
String str = input.nextLine();
System.out.println(delSpace(str));
}
public static String delSpace(String s){
//return s.replace(" ","");
return s.replaceAll(" ","");
}
}
import java.util.Scanner;
public class Test06{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.print("请输入字符串,去掉空格:");
String str = input.nextLine();
System.out.println(delSpace(str));
}
public static String delSpace(String s){
String[] arrs = s.split(" ");
//join方法是静态方法,直接使用类名称调用
return String.join("|",arrs);
}
}
- 第七题
将字母全部转换为大写或小写
public class Test07 {
public static void main(String[] args) {
String word=" I love You ";
word.trim();
System.out.println(word.toLowerCase());
System.out.println(word.toUpperCase());
}
}
- 第八题
接收用户输入的一句英文,将其中的单词以反序输出,(例:“hello c sharp”→“sharp c hello”)
import java.util.Scanner;
public class Test08 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
s.trim();
String ss=" ";
String[] arr=s.split(" ");
for(int i=arr.length-1;0<=i;i--){
ss+=arr[i];
ss+=" ";
}
System.out.println(ss);
}
}
- 第九题
从请求地址中提取出用户名和域名
import java.util.Scanner;
public class Test09 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
//System.out.println(s);
String []arrs=s.split("://|/");
System.out.println("域名为"+arrs[1]);
String []arrname=s.split("=|&");
System.out.println("用户名为:"+arrname[1]);
}
}
//https://www.163.com/?userName=admin&pwd=123456
- 第十题
让用户输入一句话,找出所有"呵"的位置。
import java.util.Scanner;
public class Test10 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入对话:");
String str = sc.nextLine();
char val='呵';
for(int i=0;i<str.length();i++){
if(str.charAt(i)==val){
System.out.println("呵——————"+i);
}
}
}
}
- 第十一题
让用户输入一句话,判断这句话中有没有邪恶,如果有邪恶就替换成这种形式然后输出,如:“老牛很邪恶”,输出后变成”老牛很**”;
import java.util.Scanner;
public class Test11 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一句话:(包含邪包含恶)");
String s = sc.nextLine();
if(s.contains("邪恶")){
String ss = s.replace("邪恶","**");
System.out.println(ss);
} else{
System.out.println("没有可替换字符");
}
}
}
- 第十二题
猜字游戏,计算机随机一个0~100的整数,每次用户输出字猜,
(提示如下:
猜大了哦,重新猜
猜小了哦,重新猜
猜对了)
import java.util.Scanner;
public class Test12 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int number=(int)(Math.random()*100);
//System.out.println("随机数为:"+number);
for(int i=5;i>=1;i--){
System.out.println("请输入一个数:");
int num=sc.nextInt();
if(num>number){
System.out.println("温馨提示: 猜大了哦!重新猜");
}else if(num<number){
System.out.println("温馨提示:猜小了哦!重新猜");
}else {
System.out.println("猜对了");
break;
}
System.out.println("您还有"+(i-1)+"次机会");
}
}
}
- 第十三题
猜拳游戏,石头剪刀布。随机数生成石头剪刀布(0:石头 1:剪刀 2:布)
//猜拳游戏,石头剪刀布。随机数生成石头剪刀布(0:石头 1:剪刀 2:布)
import java.util.Random;
import java.util.Scanner;
public class Test13 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
Random random_num =new Random();
for(int i=3;i>=1;i--){
int computer=random_num.nextInt(3);
System.out.println("欢迎参加猜拳游戏(0:石头 1:剪刀 2:布)");
System.out.print("请出拳头:");
int people=sc.nextInt();
System.out.println("机器人出:"+computer);
if(computer-people==1||computer-people==-2){
System.out.println("恭喜您胜出");
break;
}else if(computer-people==0){
System.out.println("平手");
}else {
System.out.println("机器人胜出");
}
System.out.println("您还有"+(i-1)+"机会");
}
}
}