| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> 【JavaSE】方法的使用 -> 正文阅读 |
|
[游戏开发]【JavaSE】方法的使用 |
目录 1.方法的概念及使用1.1什么是方法方法就是一个代码片段. 类似于 C 语言中的 "函数"。
1.2方法的定义
示例:判断一个年份是否为闰年
? 【注意事项】
|
特殊字符 | 数据类型 |
V | void |
Z | boolean |
B | byte |
C | char |
S | short |
I | int |
J | long |
F | float |
D | double |
[ | 数组(以[开头,配合其他的特殊字符,表述对应数据类型的数组,几个[表述几维数组) |
L | 引用类型,以L开头,以;结尾,中间是引用类型的全类名 |
1.求100到999的水仙花数并打印
public static boolean judge_Narcissistic_number ( int i){
int tmp = i;
int count = 1;//记录位数
tmp /= 10;
while (tmp != 0) {
count++;
tmp /= 10;
}
//计算
tmp = i;
int sum = 0;
while (tmp != 0) {
sum += Math.pow(tmp % 10, count);
tmp /= 10;
}
if (i == sum) {
return true;
} else {
return false;
}
}
public static void main1(String[] args) {
//输出100到999的水仙花数
int i = 0;
for (i = 100; i <= 999; i++) {
if (judge_Narcissistic_number(i) == true) {
System.out.println(i);
}
}
}
}
?2.统计二进制中1的个数
public class TestDemo {
public static void main(String[] args) {
//统计二进制中1的个数
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
System.out.println(Count_number1(n));
System.out.println(Count_number2(n));
}
//方法1
public static int Count_number1(int n){
int count = 0;
while(n!=0){
if((n&1)==1){
count++;
}
n = n >>> 1;
}
return count;
}
//方法2
public static int Count_number2(int n){
int count = 0;
while(n!=0){
count++;
n = n & (n-1);
}
return count;
}
3.获取一个数二进制序列中所有的偶数位和奇数位
public class TestDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
fun(n);
}
public static void fun(int n){
int i = 0;
//打印偶数位
for(i=30;i>=0;i-=2){
System.out.print(((n >> i) & 1) +" ");
}
System.out.println();
//打印奇数位
for(i=31;i>=1;i-=2){
System.out.print(((n >> i) & 1) +" ");
}
}
4.获取一个整数的每一位
public class TestDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
print(n);
}
public static void print(int n){
//逆序打印 123-->3 2 1
while(n!=0){
System.out.print((n%10)+" ");
n /= 10;
}
}
5.打印 x 型图案
public class TestDemo {
public static void func(int n){
for(int i =0 ; i<n ;i++){
for(int j = 0; j<n;j++){
if(i==j){
System.out.print("*");
} else if(i+j==n-1){
System.out.print("*");
} else{
System.out.print(" ");
}
}
System.out.println();
}
}
public static void main(String[] args) {
//打印 x型 图案
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
func(n);
}
?分析:
?6.找出数组中只出现了一次的数
在做题之前,我们需要先回顾一个知识点就是
这道题目我们就利用了这个结论,我们的做法是遍历数组并全部异或
public static void main(String[] args) {
//找出数组中只出现了一次的数
int [] array = {1,2,3,2,1};
int ret = 0 ;
for(int i = 0 ; i< array.length;i++){
ret = ret ^ array[i];
}
System.out.println(ret);
}
}
这里我们成功得出了结果,但是有一个缺陷
?这里的ret初值为0,我们实际上是 ret^1^2^3^2^1,也就是? 0^1^2^3^2^1
若ret的初始值改变了,那么就不能达到预期的效果?
所以我们改进一下
public static void main(String[] args) {
//找出数组中只出现了一次的数
int [] array = {1,2,3,2,1};
int ret = array[0] ;
for(int i = 1 ; i< array.length;i++){
ret = ret ^ array[i];
}
System.out.println(ret);
}
?
这样代码就更加完美了?
7.调整数组中数的顺序,使奇数位于偶数之前
分析:
?代码:
public static void main(String[] args) {
//调整数组中数的顺序,使奇数位于偶数之前
int [] array ={1,2,3,4,5};
int left = 0;
int right = array.length - 1 ;
while(left<right){
while( (left<right) && (array[left]%2 != 0) ){
left++;
}
while( (left<right) && (array[right]%2 == 0) ){
right--;
}
int tmp = array[left];
array[left]=array[right];
array[right]=tmp;
}
for(int i =0 ;i< array.length;i++){
System.out.print(array[i]+" ");
}
}
递归的必要条件:
代码示例: 递归求 N 的阶乘
public static int fac(int n){
//求n的阶乘
if(n<=1){
return 1;
} else{
return n*fac(n-1);
}
}
关于递归的更详细的介绍和递归的执行过程建议参考我之前在学习C语言时写的递归文章:
关于 "调用栈"
- 方法调用的时候, 会有一个 "栈" 这样的内存空间描述当前的调用关系. 称为调用栈.
- 每一次的方法调用就称为一个 "栈帧", 每个栈帧中包含了这次调用的参数是哪些, 返回到哪里继续执行等信息.
- 后面我们借助 IDEA 很容易看到调用栈的内容
代码示例1 按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)
?
public static void Print(int n){
//按顺序打印整数的每一位 如:1234--> 1 2 3 4
if(n>9){
Print(n/10);
}
System.out.print(n % 10+" ");
}
?代码示例2 递归求 1 + 2 + 3 + ... + 10
public static int Sum(int n){
//求 1 + 2 + 3 + 4 + 5 +...+n
if(n==0){
return 0;
}else{
return n+Sum(n-1);
}
}
代码示例3 写一个递归方法,输入一个非负整数,返回组成它的数字之和.
例如,输入 1729, 则应该返回1+7+2+9,它的和是19
?
public static int SumNumber(int n) {
//写一个递归方法,输入一个非负整数,返回组成它的数字之和.
//例如,输入 1729, 则应该返回1+7+2+9,它的和是19
if(n<10){
return n;
}
return n%10 + SumNumber(n/10);
}
代码示例4 求斐波那契数列的第 N 项
?
public static int fib(int n){
//求斐波那契数列的din项的值
if(n==1||n==2){
return 1;
}
return fib(n-1)+fib(n-2);
}
当我们求 fib(40) 的时候发现, 程序执行速度极慢. 原因是进行了大量的重复运算
?
可以使用循环的方式来求斐波那契数列问题, 避免出现冗余运算.
public static int fib2(int n){
//迭代求斐波那契数列的效率比递归高很多
if(n==1 || n==2){
return 1;
}
int f1=1;
int f2=1;
int f3=0;
for(int i=3;i<=n;i++){
f3=f1+f2;
f1=f2;
f2=f3;
}
return f3;
}
?此时程序的执行效率大大提高了
一只青蛙一次可以挑上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法
我们先画张图来帮助我们思考
我们不难发现,青蛙跳台阶就是一个变相的斐波那契数列
?只是这个数列的第一项是1,第二项是2
然后我们用代码实现
public static int FrogJump(int n){
//青蛙跳台阶问题(递归)
if(n==1||n==2){
return n;
}else{
return FrogJump(n-1)+FrogJump(n-2);
}
}
public static int FrogJump2(int n){
//青蛙跳台阶问题(非递归)
if(n==1||n==2){
return n;
}
int f1=1;
int f2=2;
int f3=0;
for(int i=3;i<=n;i++){
f3=f1+f2;
f1=f2;
f2=f3;
}
return f3;
}
?汉诺塔(Tower of Hanoi)源于印度传说中,大梵天创造世界时造了三根金钢石柱子,其中一根柱子自底向上叠着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘
这是示意图,a是起始柱,c是目标柱,b起到中转作用?
?
而图中正好是有三个圆盘的情况
这是示意图,a是起始柱,c是目标柱,b起到中转作用?
我们看几种情况得出了一个结论
?
我们分两种情况来讨论:
一. 当 n == 1时,直接将盘子从 A 移动到C
二. 当 n? > 1时,可以拆分成3大步骤?
?
?由此可以看出步骤一、三是个递归应用
下面我们用代码实现它
public class TestDemo {
public static void move(char pos1,char pos2){
System.out.print(pos1+"->"+pos2+" ");
}
/**
*
* @param n 代表盘子的个数
* @param pos1 盘子的起始位置
* @param pos2 盘子的中转位置
* @param pos3 盘子的结束位置
*/
public static void hanio(int n,char pos1,char pos2,char pos3){
if(n==1){
move(pos1,pos3);
}else{
//将pos3看作中间柱子,把n-1个盘子从pos1柱子移到pos2柱子上
hanio(n-1,pos1,pos3,pos2);
move(pos1,pos3);
//将pos1看作中间柱子,把n-1个盘子从pos2柱子移到pos3柱子上
hanio(n-1,pos2,pos1,pos3);
}
}
public static void main(String[] args) {
hanio(1,'A','B','C');
System.out.println();
hanio(2,'A','B','C');
System.out.println();
hanio(3,'A','B','C');
System.out.println();
}
}
?
?好了,关于方法的介绍就说到这里,欢迎大家多多点赞和留言,如有错误望指正
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/16 18:59:47- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |