9. 方法与函数
1.方法打印三角形
import java.util.Scanner;
class Function{
public static void main(String[] args) {
System.out.println("输入想要打印*的行数");
Scanner sc = new Scanner(System.in);
int line = sc.nextInt();
printStar(line);
}
public static void printStar(int line){
for(int i=0;i<=line;i++){
for(int j=0;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
}
}
2.方法判断是不是闰年
import java.util.Scanner;
class JudgeLeepYear1 {
public static void main (String[] args) {
System.out.println("请输入一个年份:");
Scanner sc = new Scanner(System.in);
int year = sc.nextInt();
boolean bl = judgeleepyear(year);
if(bl) {
System.out.println(year + "年是闰年√");
}else {
System.out.println(year + "年不是闰年×");
}
}
public static boolean judgeleepyear(int year) {
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
return true;
//System.out.println(year + "年是闰年√");
}else{
return false;
//System.out.println(year + "年不是闰年×");
}
}
}
数组
数组的赋值方式:
1.使用默认的初始值来初始化数组中的每一个元素
数组元素类型[]数组名 = new 数字元素类型[数组中元素的个数(数组的长度)]
如 int[] scores = new int[3];
2.先声明,然后再赋予默认的初始值
数字元素类型[]数组名;
数组名=new 数组元素类型[数组中元素的个数(数组的长度)]
如 int[] scores ;
scores = new int[3];
3.先声明,然后再使用指定的值进行初始化
数组元素类型[]数组名=new 数组元素类型[]{元素1,元素2,…};
如 int[] scores = new int[]{56,78,98};
4.将第三种写法可以简化为(使用数组常量值给数组进行赋值)
数组元素类型[]数组名 = {元素1,元素2,…};
如 int[] scores = {56,78,98};
数组的遍历:
class ArrayList {
public static void main(String[] args) {
int[] nums = new int[10];
for(int i = 1;i <= nums.length;i++){
System.out.println("nums["+(i-1)+"]="+i);
}
int[] score = new int[]{89,8989,9,898,98,99};
for(int x:score){
System.out.println(x);
}
}
}
1.判断一个随机数组是否有输入的数
import java.util.*;
class test {
public static void main(String[] args) {
int[] nums = new int[5];
int len = nums.length;
Random r = new Random();
for(int i = 0;i < len;i++){
nums[i] = r.nextInt(100);
}
System.out.println("输入一个数:");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
boolean flag = false;
System.out.println("生成的随机数是:");
for(int x:nums) {
System.out.println(x);
if(num == x){
flag = true;
break;
}
}
if(flag){
System.out.println("有你输入的数");
}else{
System.out.println("没有你输入的数");
}
}
}
2.打印
A
B B B
C C C C C
D D D D D D D
E E E E E E E E E
F F F F F F F F F F F
G G G G G G G G G G G G G
import java.util.*;
class test {
public static void main(String[] args) {
char[] cs = {'A','B','C','D','E','F','G'};
int len = cs.length;
for(int i = 1;i <= len;i++){
for(int j = i;j < len;j++){
System.out.print(" ");
}
for(int j = 1;j <= i*2-1;j++){
System.out.print(cs[i-1]);
}
System.out.println();
}
}
}
多维数组
3.有3个班级各3名学员参赛,纪录每个学员的成绩,并计算每个班级的平均分
import java.util.*;
class test {
public static void main(String[] args) {
int [][] scores = {{78,79,80},{88,89,90},{56,57,58}};
int classLen = scores.length;
for(int i = 0;i < classLen;i++) {
int sum = 0;
int count = scores[i].length;
for(int j = 0;j < count;j++){
sum += scores[i][j];
}
int avg = sum/count;
System.out.println("第"+(i+1)+"班的平均成绩是:"+avg);
}
}
}
4.求最大值最小值算法
class maxmin {
public static void main(String[] args) {
int[] num = {12,23,434,3,7,5555,56,78,0};
int max = max(num);
System.out.println("最大值是:"+max);
int min = min(num);
System.out.println("最小值是:"+min);
}
public static int max(int[] num){
int max = num[0];
int len = num.length;
for(int i = 1;i < len;i++) {
if(num[i] > max) {
num[i] = num[i]+max;
max = num[i]-max;
num[i] = num[i]-max;
}
}
return max;
}
public static int min(int[] num){
int min = num[0];
int len = num.length;
for(int i = 1;i < len;i++) {
if(num[i] < min) {
num[i] = num[i]+min;
min = num[i]-min;
num[i] = num[i]-min;
}
}
return min;
}
}
5. 冒泡排序(比较相邻的元素,如果第一个比第二个大,就交换它们两个,对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重读以上的步骤,除了最后一个。持续每次对越来越少的元素重读上面的步骤,直到没有任何一对数字需要比较。相同元素的前后顺序并没有改变)————冒泡排序是一种稳定排序算法
class maopao {
public static void main(String[] args) {
int[] nums = {34,4,56,17,90,65};
int len = nums.length;
for(int i = 0;i < len-1;i++) {//外循环控制轮数,比较轮数等于数列的长度-1;
for(int j = 0;j < len-1-i;j++) {
if(nums[j]>nums[j+1]){
nums[j] = nums[j]+nums[j+1];
nums[j+1] = nums[j]-nums[j+1];
nums[j] = nums[j]-nums[j+1];
}
}
}
System.out.println("冒泡排序结果:");
for(int x:nums){
System.out.println(x);
}
}
}
/*
34 4 56 17 90 65
4 34 17 56 65 90 //第一轮 5次
4 17 34 56 65 //第二轮 4次
4 17 34 56 //第三轮 3次
4 17 34 //第四轮 2次
4 17 //第五轮 1次
*/
6. 选择排序算法(每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已经排好的数列的最后,直到全部待排序的数据元素排序完毕)————选择排序是不稳定的排序方法
class xuanze {
public static void main(String[] args) {
int[] nums = {34,4,56,17,90,65};
int minIndex = 0;//用于纪录每次比较的最小值下标
//控制轮数
for(int i = 0;i < nums.length-1;i++) {
minIndex = i;//每轮假设一个最小值下标
for(int j = i+1;j < nums.length;j++) {
if(nums[minIndex] > nums[j]) {
minIndex = j;
}
}
//判断需要交换的数下标是否为自己
if(minIndex != i) {
nums[minIndex] = nums[minIndex]+nums[i];
nums[i] = nums[minIndex]-nums[i];
nums[minIndex] = nums[minIndex]-nums[i];
}
}
System.out.println("选择排序结果:");
for(int n: nums) {
System.out.println(n);
}
}
}
/*
34 4 56 17 90 65
4 34 56 17 90 65 第一轮 5次
4 17 56 34 90 65 第二轮 4次
4 17 34 56 90 65 第三轮 3次
4 17 34 56 90 65 第四轮 2次
4 17 34 56 65 90 第五轮 1次
*/
7. 插入排序算法(基本思想:每步将一个待排序的纪录,按其顺序码大小插入到前面已经排序的子序列的合适位置(从后向前找到合适的位置后插入),直到全部插入排序完为止)
class Insert {
public static void main(String[] args) {
int[] nums = {34,4,56,17,90,65};
//控制比较的轮数
for(int i = 1;i < nums.length;i++) {
int temp = nums[i];//记录操作数
int j = 0;
for(j = i-1;j >= 0;j--) {
if(nums[j] > temp) {
nums[j+1] = nums[j];
}else{
break;
}
}
if(nums[j+1] != temp) {
nums[j+1] = temp;
}
}
System.out.println("插入排序结果:");
for(int n: nums) {
System.out.println(n);
}
}
}
8. 二分(折半)查找算法 (前提是在已经排好序的数组中,通过将待查找的元素与中间索引值对应的元素进行比较,若大于中间索引值对应的元素,去右半部分查找,否则,去左半部分查找。以此类推直到找到为止找不到返回一个负数)
import java.util.Scanner;
class erfenSearch {
public static void main(String[] args) {
int[] nums = {10,20,50,88,90};
System.out.println("输入你想要查找的数:");
Scanner sc = new Scanner(System.in);
int get = sc.nextInt();
int index = binarySearch(nums,get);
System.out.println("你要查找的数在数组中第"+(index+1)+"个");
}
public static int binarySearch(int[] nums,int key){
int start = 0;
int end = nums.length-1;
while(start <= end) {
int middle = (start+end)/2;
if(nums[middle] > key) {
end = middle-1;
}else if(nums[middle] < key) {
start = middle+1;
}else{
return middle;
}
}
return -1;
}
}