7.9 作业 韩宗轩
一. 方法(函数)
1:函数的概念?函数的格式?格式的解释说明\
修饰符 返回值类型 方法名(参数类型 参数名1 ,参数类型 参数名2…..){
方法体语句;
return 返回值;
}
2:函数的调用
A:明确返回值类型的函数调用
a:单独调用,一般来说没有意义,所以不推荐。
b:输出调用,但是不够好。因为我们可能需要针对结果进行进一步的操作。
c:赋值调用,推荐方案。
B:void类型的函数调用
没有返回值的调用
3:函数的练习:
A:求两个数据之和
class H1 {
public static void main(String[] args) {
//A:求两个数据之和
//int sum = add(444,666);
System.out.println(add(444,666));
}
public static int add(int a,int b){
int sum = a + b;
return sum;
}
}
B:判断两个数据是否相等
class H2 {
public static void main(String[] args) {
//B:判断两个数据是否相等
System.out.println(isEquals(4,5));
}
public static boolean isEquals(int a,int b){
return (a == b)? true:false;
}
}
C:获取两个数中较大的值
class H3 {
public static void main(String[] args) {
//C:获取两个数中较大的值
getMax(45,66);
}
public static void getMax(int a,int b){
if (a > b) {
System.out.println(a);
}else
System.out.println(b);
}
}
D:打印m行n列的星形矩形\
class H4 {
public static void main(String[] args) {
//D:打印m行n列的星形矩形
print(5,7);
}
public static void print(int m,int n){
for (int i = 1;i <= m;i++ ) {
for (int j = 1;j <= n ;j++ ) {
System.out.print("*");
}
System.out.println();
}
}
}
E:打印nn乘法表
import java.util.Scanner;
class H5 {
public static void main(String[] args) {
//E:打印nn乘法表
Scanner sc = new Scanner(System.in);
System.out.println("请输入打印1-9行乘法表");
int hang = sc.nextInt();
print(hang);
}
public static void print(int n){
for (int i = 1;i <= n ;i++ ) {
for (int j = 1;j <= i ;j++ ) {
System.out.print(j +" * "+ i +" = " + i * j + '\t');
}
System.out.println();
}
}
}
4:什么是函数重载?以及函数重载的练习?把讲过的案例练习一次即可
===============================================================
===============================================================
二. 内存图
画图操作:
1.一个数组的内存图
2.两个数组的内存图
3.三个引用两个数组的内存图
=======================================
=======================================
三.数组
1:数组的概念?有什么特点?
数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
数组既可以存储基本数据类型,也可以存储引用数据类型。
2:一维数组的定义格式?
数据类型[] 数组名 = new 数据类型[数组的长度];
3:数组操作的两个小问题
* a:ArrayIndexOutOfBoundsException:数组索引越界异常--->当数组引用赋值为null,再去调用数组中的元素就会出现空指针异常
* 原因:你访问了不存在的**索引**。
* b:NullPointerException:空指针异常
* 原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。
* int[]
arr = {1,2,3};
* arr
= null;
* System.out.println(arr[0]);
4:数组常见操作:
数组遍历(依次输出数组中的每一个元素)
class Shu1 {
public static void main(String[] args) {
//数组遍历(依次输出数组中的每一个元素)
int[] arr = new int[]{4,45,6,57,57,678};
print(arr);
}
public static void print(int[] arr){
for (int i = 0;i < arr.length ;i++ ) {
System.out.println(arr[i]);
}
}
}
数组获取最值(获取数组中的最大值最小值)
class Shu2 {
public static void main(String[] args) {
int[] arr = new int[]{4,45,6,57,507,678};
System.out.println(getMax(arr));
}
public static int getMax(int[] arr){
int max = arr[0];
for (int i = 1;i < arr.length;i++ ) {
if (max < arr[i]) {
max = arr[i];
}
}
return max;
}
}
数组元素逆序 (就是把元素对调)
class Shu3 {
public static void main(String[] args) {
int[] arr = new int[]{4,45,6,57,507,678};
reverseArray(arr);
print(arr);
}
public static void reverseArray(int[] arr ){
for (int i = 0;i < arr.length/2 ;i++ ) {
int arr0 = arr[i];
arr[i] = arr[arr.length-1-i];
arr[arr.length-1-i] = arr0 ;
}
}
public static void print(int[] arr ){
for (int i = 0;i < arr.length;i++ ) {
System.out.print(arr[i]+" ");
}
}
}
数组查表法(根据键盘录入索引,查找对应星期)
import java.util.Scanner;
class H6 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入1-7");
int week = sc.nextInt();
System.out.println(getWeek(week));
}
public static char getWeek(int week ){
char[] arr ={' ','一','二','三','四','五','六','七',};
return arr[week];
}
}
数组元素查找(查找指定元素第一次在数组中出现的索引)
class H7 {
public static void main(String[] args) {
int[] arr={3,5,6,7,76};
int num=getIndex(arr,6);
System.out.println(num);
}
public static int getIndex(int[] arr,int value){
for (int i = 0;i < arr.length;i++ ) {
if (arr[i] == value) {
return i;
}
}
return -1;
}
}
5:二维数组定义格式?
看懂针对每种格式的内存图解?
6:案例
A:二维数组遍历
class H8 {
public static void main(String[] args) {
int [][]arr = {{1,2,3},{4,5},{6,7,8,9}};
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();
}
}
}
B:公司年销售额求和
某公司按照季度和月份统计的数据如下:单位(万元)
第一季度:22,66,44
第二季度:77,33,88
第三季度:25,45,65
第四季度:11,66,99
class H9 {
public static void main(String[] args) {
int [][] arr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}};
int sum =0;
for (int i = 0;i < arr.length ;i++ ) {
for (int j = 0;j < arr[i].length ;j++ ) {
sum += arr[i][j];
}
}
System.out.println(sum);
}
}
7:参数传递问题
基本数据类型的值传递,不改变原值,因为方法调用后就会弹栈,而局部变量随之消失
引用数据类型的值传递,改变原值,因为即使方法调用后弹栈,但是堆内存中的数组对象还在,可以通过地址(引用)继续访问.
java中到底是传值,还是传址呢?
1.既是传值,也是传址:基本数据类型传递的是值,引用数据类型传递的是址.
2.java中只有传值:因为地址值也是值(出去面试时都说这种:支持者是java之父:高司令)