算法运用:
计算1-100之间的所有的奇数和
1+3+5+7...+99
public class LoopTest{
public static void main(String[] args){
// 定义变量,保存求和
int sum = 0;
// for循环,循环中的变量, 0-100
for(int i = 0 ; i <= 100 ; i++){
//对循环的变量,进行奇数的判断, %2==1
if(i % 2 == 1){
//对奇数求和
sum += i;
}
}
System.out.println(sum);
}
}
要求: 计算出水仙花数
三位数100-999 个位数的立方+十位数的立方+百位数的立方 = 自己本身
153 = 1*1*1 + 5*5*5 + 3*3*3
已知三位数 123 获取出每个数位 利用 除法,取模运算
实现步骤:
1. 定义变量才存储 三个数位上的整数
2. 利用循环,循环中的变量,从100变化到999
3. 循环中得到三位数,利用算法,拆解成三个单独数位
4. 将三个数位立方的求和计算, 计算后的求和,和他自己进行比较判断
想同,就是水仙花
*/
public class LoopTest_1{
public static void main(String[] args){
//定义三个变量
int bai = 0;
int shi = 0;
int ge = 0 ;
//循环,循环变量从100-999
for(int i = 100 ; i < 1000 ; i++){
//对i,进行计算,获取出三个数位
//获取百位
bai = i / 100;
//获取十位
shi = i / 10 % 10;
//获取个位
ge = i % 10;
//对三个数位进行立方求和
if(bai * bai * bai + shi * shi *shi + ge * ge *ge == i){
System.out.println(i);
}
}
}
}
/*
数组的查找功能
在一个数组中,找一个元素,是否存在于数组中,如果存在,就返回索引
普通查询:
找到元素在数组中出现的索引,如果没有这个 元素,结果就是负数
*/
public class ArrayMethodTest_3{
public static void main(String[] args){
int[] arr = {1,3,5,7,9,11,15};
int index = binarySearch(arr,10);
System.out.println(index);
}
/*
定义方法,实现,折半查找
返回值: 索引
参数: 数组,被找的元素
实现步骤:
1. 需要的变量定义
三个,三个指针
2. 进行循环折半
可以折半的条件 min <= max
3. 让被找元素,和中间索引元素进行比较
元素 > 中间索引 小指针= 中间+1
元素 < 中间索引 大指针= 中间-1
元素 == 中间索引 找到了,结束了,返回中间索引
4. 循环结束,无法折半
元素没有找到 ,返回-1
*/
public static int binarySearch(int[] arr, int key){
//定义三个指针变量
int min = 0 ;
int max = arr.length -1 ;
int mid = 0;
//循环折半,条件 min<=max
while( min <= max){
//公式,计算中间索引
mid = (min+max)/2;
//让被找元素,和中间索引元素进行比较
if(key > arr[mid]){
min = mid + 1;
}else if (key < arr[mid]){
max = mid - 1;
}else{
//找到元素,返回元素索引
return mid;
}
}
return -1;
}
/*
定义方法,实现数组的普通查询
返回值: 索引
参数: 数组, 被找的元素
实现步骤:
1. 遍历数组
2. 遍历过程中,使用元素和数组中的元素进行比较
如果相同,返回元素在数组中的索引
如果不同,返回负数
*/
public static int search(int[] arr, int key){
//遍历数组
for(int i = 0 ; i < arr.length ; i++){
//数组元素,被查找的元素比较
if(arr[i] == key){
//返回索引
return i;
}
}
return -1;
}
}
/*
数组的排序: 一般都是升序排列,元素,小到大的排列
两种排序的方式
选择排序: 数组的每个元素都进行比较
冒泡排序: 数组中相邻元素进行比较
规则: 比较大小,位置交换
*/
public class ArrayMethodTest_2{
public static void main(String[] args){
int[] arr = {3,1,4,2,56,7,0};
//调用选择排序方法
//selectSort(arr);
//调用冒泡排序方法
bubbleSort(arr);
printArray(arr);
}
/*
定义方法,实现数组的冒泡排序
返回值: 没有
参数: 数组
*/
public static void bubbleSort(int[] arr){
for(int i = 0 ; i < arr.length - 1; i++){
//每次内循环的比较,从0索引开始, 每次都在递减
for(int j = 0 ; j < arr.length-i-1; j++){
//比较的索引,是j和j+1
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
/*
定义方法,实现数组的选择排序
返回值: 没有
参数: 数组
实现步骤:
1.嵌套循环实现排序
外循环,控制的是一共比较了多少次
内循环,控制的是每次比较了多少个元素
2. 判断元素的大小值
小值,存储到小的索引
*/
public static void selectSort(int[] arr){
for(int i = 0 ; i < arr.length - 1; i++){
//内循环,是每次都在减少,修改变量的定义
for(int j = i+1 ; j < arr.length ; j++){
//数组的元素进行判断
if(arr[i] > arr[j]){
//数组的换位
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
/*
定义方法,实现功能
返回值: void
方法参数: 数组
*/
public static void printArray(int[] arr){
//输出一半中括号,不要换行打印
System.out.print("[");
//数组进行遍历
for(int i = 0 ; i < arr.length ; i++){
//判断遍历到的元素,是不是数组的最后一个元素
//如何判断 循环变量 到达 length-1
if( i == arr.length-1 ){
//输出数组的元素和]
System.out.print(arr[i]+"]");
}else{
//不是数组的最后一个元素,输出数组元素和逗号
System.out.print(arr[i]+",");
}
}
System.out.println();
}
}
/*
利用嵌套for循环,实现99乘法表示
实现步骤:
1. 定义外循环控制行数
2. 内循环控制个数,个数,每次都在递增
3. 循环中输出,乘法表的格式 1*3=3
*/
public class LoopTest_3{
public static void main(String[] args){
print99(9);
}
public static void print99(int n){
//定义外循环,循环9次
for(int i = 1; i <= n; i++){
//定义内循环,每次递增,循环条件, <=i
for(int j = 1; j <= i ;j++){
//按照标准格式,输出打印
System.out.print(j+"*"+i+"="+i*j+"\t");
}
System.out.println();
}
}
}