本篇博客继上一篇内容继续记录听黑马课的时候的笔记以及课堂上练习的代码,文章图源于我在听课的时候所截的屏,所以有些不清晰,请见谅。下面是课程链接,可点击自行跳转。
数组
数组的定义与静态初始化及遍历

两种静态初始化详细解释和例子:
第一种:

第二种:

小练手1(静态数组创建并遍历):
数组名.length可以获取数组长度
public class test{
public static void main(String[] args){
int arr1[] = {1,2,3};
String arr2[] = {"Tom","James","Mike","Jerry"};
double arr3[] = {12.0,5.2,6.3};
for(int i=0;i<3;i++){
System.out.println(arr1[i]);
}
for(int i=0;i<arr2.length;i++){
System.out.println(arr2[i]);
}
}
}
小练手2(求数组所有数据的和):
import java.util.Scanner;
public class test{
public static void main(String[] args){
System.out.println("请输入数组的长度:");
Scanner sc = new Scanner(System.in);
int len = sc.nextInt();
int arr1[] = new int[len];
int num1 = 0;
System.out.println("请输入数组的值:");
for(int i=0;i<len;i++){
int tmp = sc.nextInt();
arr1[i] = tmp;
}
for(int i=0;i<len;i++){
num1 += arr1[i];
}
System.out.println(num1);
}
}
数组动态初始化


小练手1(求最值):
import java.util.Scanner;
public class test{
public static void main(String[] args){
System.out.println("请输入数组的长度:");
Scanner sc = new Scanner(System.in);
int len = sc.nextInt();
int arr1[] = new int[len];
int maxnum = 0;
System.out.println("请输入数组的值:");
for(int i=0;i<len;i++){
int tmp = sc.nextInt();
arr1[i] = tmp;
}
for(int i=0;i<len;i++){
if(maxnum<arr1[i]){
maxnum = arr1[i];
}else{
maxnum = maxnum;
}
}
System.out.println(maxnum);
}
}
小练手2(遍历数组求和):

import java.util.Random;
public class test{
public static void main(String[] args){
int arr[] = new int[10];
Random r = new Random();
int avnum = 0;
int num = 0;
int num1 = 0;
for(int i=0;i<10;i++){
arr[i] = r.nextInt(99)+1;
num += arr[i];
}
avnum = num/10;
for(int i=0;i<10;i++){
if(arr[i]<avnum){
num1++;
}
}
System.out.println("数据和:"+num+"平均数:"+avnum+"比平均数小的数量:"+num1);
}
}
小练手3(交换数组):

import java.util.Scanner;
public class test{
public static void main(String[] args){
System.out.println("请输入数组的长度:");
Scanner sc = new Scanner(System.in);
int len = sc.nextInt();
int arr1[] = new int[len];
int num = 0;
System.out.println("请输入数组的值:");
for(int i=0;i<len;i++){
int tmp = sc.nextInt();
arr1[i] = tmp;
}
System.out.println("请分别输入要交换的索引值:");
int t1 = sc.nextInt();
int t2 = sc.nextInt();
num = arr1[t1];
arr1[t1] = arr1[t2];
arr1[t2] = num;
for(int i=0;i<len;i++){
System.out.println(arr1[i]);
}
}
}
数组内存分配


只要是new出来的一定是在堆里面开辟了一个小空间。
如果new了多次,那么在堆里面有多个小空间,每个小空间中都有各自的数据。

当两个数组指向同一个小空间时,其中一个数组对小空间中的值发生了改变,那么其他数组再次访问的时候都是修改之后的结果。
方法
方法的定义和格式


无参方法


小练手(方法定义和调用):
public class test{
public static void main(String[] args){
Print();
}
public static void Print(){
System.out.println("Love yourself and love what you love");
}
}
带参方法



带返回值方法


方法的重载



小练手1(数组遍历):
public class test{
public static void main(String[] args){
int arr[] = {1,2,3,4,5};
Print(arr);
}
public static void Print(int arr[]){
System.out.print("[");
for (int i=0;i<arr.length ;i++ ){
if (i<arr.length-1) {
System.out.print(arr[i]);
System.out.print(",");
}else{
System.out.print(arr[i]);
}
}
System.out.print("]");
}
}
小练手2(复制数组):

我的思路:
public class test{
public static void main(String[] args){
int arr[] = {1,2,3,4,5};
int arr1[] = copyArr(arr,1,5);
for (int i=0;i<arr1.length ;i++ ){
System.out.println(arr1[i]);
}
}
public static int[] copyArr(int []arr,int from,int to){
int len = to -from;
int newarr[] = new int[len];
for (int i=0;i<len;i++ ){
newarr[i] = arr[i+from];
}
return newarr;
}
}
方法的基本内存原理

引用数据类型和基本数据类型


方法值的传递



综合练习
飞机票价

小练手(求机票价格):
import java.util.Scanner;
public class test{
public static void main(String[] args){
System.out.println("请输入价格,月份(1-12),头等舱(1)还是经济舱(0):");
Scanner sc = new Scanner(System.in);
Double price = sc.nextDouble();
int month = sc.nextInt();
int num = sc.nextInt();
price = Cost(price,month,num);
System.out.println(price);
}
public static Double Cost(Double price,int month,int num){
if((month>=5)&&(month<=10)){
//num=1表示为头等舱
if(num==1){
price = 0.9*price;
}else{
price = 0.85*price;
}
}else{
if(num==1){
price = 0.7*price;
}else{
price = 0.65*price;
}
}
return price;
}
}
统计101-200之间有多少个素数
小练手(统计质数/素数):
public class test{
public static void main(String[] args){
int count=0;
for(int i=101;i<=200;i++){
Boolean flag = true;
for(int j=2;j<i;j++){
if(i%j==0){
flag = false;
break;
}
}
if(flag){
count++;
System.out.println(i+"是素数");
}
}
System.out.println("素数个数为"+count);
}
}
验证码生成

小练手(验证码生成):
import java.util.Random;
public class CodeTest {
public static void main(String[] args) {
//随机生成五位验证码,前四位是字母,后一位是数字
char arr[] = new char[52];
for (int i = 0; i < arr.length; i++) {
if (i<26){
arr[i] = (char)(i+65);
}else {
arr[i] = (char)(i+97-26);
}
}
String result = "";
Random r = new Random();
for (int i = 0; i < 4; i++) {
int index = r.nextInt(arr.length);
result += arr[index];
}
int number = r.nextInt(10);
result += number;
System.out.println(result);
}
}
评委打分

小练手(计算选手得分):
import java.util.Scanner;
public class scoreTest {
public static void main(String[] args) {
int[] arr = new int[6];
//评委打分
commit(arr);
//计算最大值
int maxnum = getMax(arr);
//计算最小值
int minnum = getMin(arr);
//计算总和,求平均值
int sum = getSum(arr, maxnum, minnum);
System.out.println("该选手的得分为:"+sum/(arr.length-2));
}
//评委打分
public static void commit(int[] arr) {
Scanner sc = new Scanner(System.in);
for (int i = 0; i < arr.length; i++) {
System.out.println("请输入第"+(i+1)+"位评委所打的分数:");
arr[i] = sc.nextInt();
if (arr[i]>=0&&arr[i]<=100) {
System.out.println("当前所打分数为:"+arr[i]);
}else {
System.out.println("输入范围出错请重新输入:");
arr[i] = sc.nextInt();
}
}
}
//计算最大值
public static int getMax(int[] arr) {
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i]>max) {
max = arr[i];
}
}
return max;
}
//计算最小值
public static int getMin(int[] arr) {
int min = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i]<min) {
min = arr[i];
}
}
return min;
}
//计算总和
public static int getSum(int[] arr, int maxnum, int minnum) {
int sum = 0;
for (int i = 0; i < arr.length; i++) {
if(arr[i]!=maxnum&&arr[i]!=minnum){
sum+=arr[i];
}
}
return sum;
}
}
数字加密

小练手(数字密码加密):
import java.util.Scanner;
public class codeReverse {
public static void main(String[] args) {
System.out.println("请输入数字密码:");
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int len = stay(a);
int[] arr = new int[len];
//获取要加密的数字
number(a,arr);
//对数字进行加5,再对10求余
option(arr);
//将数字翻转
reverse(arr);
System.out.print("加密之后的密码为:"+getResult(arr));
}
//将加密数字放入数组中
public static int stay(int num1) {
int count = 0;
while (num1!=0){
num1 = num1/10;
count++;
}
return count;
}
//获取要加密的数字
public static void number(int num2,int[] arr) {
int index = stay(num2)-1;
while (num2!=0){
int num3 = num2%10;
num2 = num2/10;
arr[index] = num3;
index--;
}
}
//对数字进行加5,再对10求余
public static void option(int[] arr) {
for (int i = 0; i < arr.length; i++) {
arr[i] = arr[i] + 5;
arr[i] = arr[i] % 10;
}
}
//将数字翻转
public static void reverse(int[] arr) {
for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
//将数字拼接
public static int getResult(int[] arr) {
int result = 0;
for (int i = 0; i < arr.length; i++) {
result = result*10 + arr[i];
}
return result;
}
}
数字解密

小练手(数字解密):
public class codeReverse2 {
public static void main(String[] args) {
int arr[] = {8,3,4,6};
//反转
for (int i = 0,j=arr.length-1; i < j; i++,j--) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//反过去%10操作
for (int i = 0; i < arr.length; i++) {
if (arr[i]>=0&&arr[i]<=4) {
arr[i]=arr[i]+10;
}
}
//加5
for (int i = 0; i < arr.length; i++) {
arr[i]=arr[i]-5;
}
//拼接
int number=0;
for (int i = 0; i < arr.length; i++) {
number = number*10+arr[i];
}
System.out.println(number);
}
}
抢红包

小练手(抢红包):
import java.util.Random;
public class moneyTest {
public static void main(String[] args) {
//法一效率较高
int[] arr = {2,588,888,1000,10000};
Random r = new Random();
for (int i = 0; i < arr.length; i++) {
int index = r.nextInt(arr.length);
int temp=arr[i];
arr[i]= arr[index];
arr[index]=temp;
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]+"元的奖金被抽出");
}
}
//法二 效率较低
// public static void main(String[] args) {
// int[] arr = {2,588,888,1000,10000};
// int[] arr2 = new int[arr.length];
// Random r = new Random();
// for (int i = 0; i < arr.length; ) {
// int index = r.nextInt(arr.length);
// boolean flag = contain(arr[index],arr2);
// if (!flag) {
// //不存在
// arr2[i] = arr[index];
// i++;
// }
// }
// for (int i = 0; i < arr2.length; i++) {
// System.out.println(arr2[i]+"元的奖金被抽出");
// }
// }
// public static boolean contain(int price,int[] arr) {
// for (int i = 0; i < arr.length; i++) {
// if (price == arr[i]){
// //存在
// return true;
// }
// }
// //不存在
// return false;
// }
}
二维数组
静态初始化


动态初始化

小练手1(二维数组创建):
public class Main {
public static void main(String[] args) {
int arr[][] = {{1,2,3},{4,5}};
int arr1[][] = new int[3][2];
arr1[0][0]=1;
arr1[0][1]=2;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
}


小练手2(计算营业额):

public class countMoney {
public static void main(String[] args) {
int [][]arr = {
{22,66,44},
{77,33,88},
{25,45,65},
{11,66,99}
};
int countMoney = 0;
for (int i = 0; i < arr.length; i++) {
int []arr2 = arr[i];
int sum = getCountMoney(arr2);
System.out.println("第"+(i+1)+"个季度的总营业额为"+sum);
for (int j = 0; j < arr[i].length; j++) {
countMoney += arr[i][j];
}
}
System.out.println("全年的总营业额为:"+countMoney);
}
public static int getCountMoney(int[] arr) {
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
}
这篇文章就先更到这里,接下来的内容可查看我的下一篇博客,感谢观看,希望对你有帮助。

1万+

被折叠的 条评论
为什么被折叠?



