java复习第五天(有点意思了)方法,数组,数组面试题

1.方法
概述:就是完成特定功能的代码块
格式:
修饰符 返回值类型 方法名(参数列表){
方法体;
return 返回值;
}
格式解析:
修饰符:现在就用public static
返回值类型:根据返回值决定的
方法名:只是为了调用方法,只是一个名字
参数列表:传递参数给方法,多个参数之间用","隔开
方法体:就是完成特定功能的代码块
return:结束方法并将返回值返回给调用者
返回值:就是最后产生的结果

有明确返回值的方法:
单独调用没有任何意义
输出调用,意义不大,因为想输出可以直接在方法中输出
赋值调用,可以拿着返回值想干啥就干啥
没有明确返回值的方法:其实就是返回值类型为void
只能单独调用

注意事项:
方法不调用不执行
方法和方法之间是平级存在的,不能嵌套定义
方法的参数列表中有多个参数时,需要用","隔开
如果方法有明确的返回值,那么就需要用return返回一个兼容的值
调用方法时,传递的值必须是常量值或者变量值

方法成重载:java允许一个类中存在一个以上的同名方法,只要方法的参数列表不同即可
注意事项:
方法重载和返回值类型没有关系
JVM是通过参数列表的不同来区分同名的方法
2.数组
概述:就是存储同一种数据类型元素的集合(容器)
特点:
可以存储基本数据类型和引用数据类型
一旦长度定义了就无法改变
只能存储同一种数据类型的值
存储在数组中的变量叫做元素(Element)
定义格式:
数据类型[] 数组名;
动态初始化:就是我们指定数组的长度,然后由系统指定每个数组元素的值
数据类型[] 数组名 = new 数据类型[数组长度];
静态初始化:就是我们指定数组元素的值,由系统根据元素的个数计算数组的长度
数据类型[] 数组名 = {值1,值2...};

栈:局部变量,方法的执行也是在栈中,方法执行完之后,方法就消失了,局部变量就业消失
栈的变量不会赋初始化值
堆:存放new出来的东西,存放在堆中的变量叫做成员变量,会赋初始化值;

基本类型的初始化值就是默认值,引用数据类型的初始化值就是null

面试题:

1.对一维数组进行增删改查:int[] num = new int[10]; 
要求:用方法实现 
1.输入10个整数存入数组 
2.删除指定位置上的数 
3.修改指定位置上的数 
4.去掉一个最大值,去掉一个最小值,求平均值

5.将数组中的元素值赋值到数组copyArr中

import java.util.Scanner;
public class Test1 {
/*
Scanner接收数值的结束标记是:\r\n或者空格
1.对一维数组进行增删改查:int[] arr = new int[10]; 
要求:用方法实现 
1.输入10个整数存入数组 
2.删除指定位置上的数 
3.修改指定位置上的数 
4.去掉一个最大值,去掉一个最小值,求平均值
5.将数组中的元素值赋值到数组copyArr中
*/



public static void main(String[] args){
int[] arr = new int[10]; 
//1.输入10个整数存入数组
fillArray(arr);
//遍历数组
showArray(arr);
System.out.println("--------------------------------------------");
//2.删除指定位置上的数 
arr = deleteNumberAt(arr,2);
//遍历数组
showArray(arr);
System.out.println("--------------------------------------------");
//3.修改指定位置上的数 
updateNumber(arr,5,1314);
//遍历数组
showArray(arr);
System.out.println("--------------------------------------------");
//4.去掉一个最大值,去掉一个最小值,求平均值
float avg = getArrayAvg(arr);
System.out.println("avg="+avg);
System.out.println("--------------------------------------------");
//5.将数组中的元素值赋值到数组copyArr中
//新建一个数组,用于存放原数组中的内容
int[] arr2 = new int[arr.length];
//遍历拷贝之前新数组
showArray(arr2);
copyArray(arr,arr2);
//遍历拷贝之后新数组
showArray(arr2);
}
//5.将数组中的元素值赋值到数组copyArr中
public static void copyArray(int[] srcArray,int[] destArray){
//遍历原数组,将原数组中的元素拷贝到目标数组中
for(int i=0; i<srcArray.length; i++){
destArray[i] = srcArray[i];
}
}

//4.去掉一个最大值,去掉一个最小值,求平均值
public static float getArrayAvg(int[] arr){
//定义变量用于保存平均值
float avg = 0;

//先要求出最大值和最小值
//假设第一个元素是最大值
int max = arr[0];
//假设第一个元素是最小值
int min = arr[0];
//遍历数组,拿出元素和最大值以及最小值做比较
for(int i=0; i<arr.length; i++){
//取出i索引对应的元素值
int value = arr[i];
if(value>max){
max = value;
}
if(min>value){
min = value;
}
//累加数组的和
avg += value;
}

//除去一个最大值和一个最小值
avg -= max;
avg -= min;
avg /= (arr.length-2);

return avg;
}

//3.修改指定位置上的数
public static void updateNumber(int[] arr,int index,int value){
//遍历数组
for(int i=0; i<arr.length; i++){
//如果当前索引就是要修改的索引,那么就将当前的索引对应的值修改为value
if(i==index){
arr[i] = value;
break;//结束循环
}
}
}

//2.删除指定位置上的数 
public static int[] deleteNumberAt(int[] arr,int index){
//判断要删除的索引是否存在
if(index<0 || index>arr.length-1){
System.out.println("你要删除的索引不存在");
return arr;
}
//新建一个数组,它的长度是原数组长度-1
int[] temp = new int[arr.length-1];
/*
遍历原数组,把除了要删除的索引之外的值都copy到新数组中
i是原数组的索引
j是新数组的索引
*/
for(int i=0,j=0; i<arr.length; i++){
if(i!=index){
//把i对应的元素值赋值给temp数组
temp[j] = arr[i];
//当新数组当前位置赋值完毕之后,索引位置往后移一位
j++;
}
}
//把新数组返回
return temp;
}

//1.输入10个整数存入数组 
public static void fillArray(int[] arr){
/*Scanner sc = new Scanner(System.in);
//用for循环,循环的从键盘录入数值,然后填充到数组中
for(int i=0; i<arr.length; i++){
System.out.println("请输入第"+(i+1)+"个元素的值:");
int v = sc.nextInt();
//把v赋值给当前索引对应的元素
arr[i] = v;
}*/
//用for循环,循环的从键盘录入数值,然后填充到数组中
for(int i=0; i<arr.length; i++){
//把v赋值给当前索引对应的元素
arr[i] = i+1;
}
}

//遍历数组
public static void showArray(int[] arr){
//遍历格式[1,2,3,4,5,6]
for(int i=0; i<arr.length; i++){
//首先判断数组长度是否等于1
if(arr.length==1){
System.out.println("["+arr[i]+"]");
}else if(i==0){//是第一元素
System.out.print("["+arr[i]+",");
}else if(i==arr.length-1){//是最后一个元素
System.out.println(arr[i]+"]");
}else{
System.out.print(arr[i]+",");
}
}
}
}



 2.请将”我” “爱” “你”存入数组,然后正着和反着输出



public class Test2 {


public static void main(String[] args){
//2.请将”我” “爱” “你”存入数组,然后正着和反着输出
char[] arr = {'我','爱','你'};

for(int i=0; i<arr.length; i++){
System.out.print(arr[i]+" ");
}
//换行
System.out.println();
for(int i=arr.length-1; i>=0; i--){
System.out.print(arr[i]+" ");
}
}
}



3.编写一个程序,使它能够读入10个整数,这10个整数不能相同,最后将这10个数输出

import java.util.Scanner;
public class Test3 {




public static void main(String[] args){
//3.编写一个程序,使它能够读入10个整数,这10个整数不能相同,最后将这10个数输出
Scanner sc = new Scanner(System.in);
int[] arr = new int[10];

//定义变量用于记录数组赋值的索引位置
int index = 0;

//如果没有赋值完毕就一直循环赋值
while(index<arr.length){
System.out.println("请输入要赋值的第"+(index+1)+"个元素值:");
int value = sc.nextInt();
//定义一个变量用于保存value是否已经存在数组中了
boolean b = false;//默认不存在数组中

/*判断value是否以及存在数组中
从0索引遍历数组,一直遍历到以及赋值的索引位置结束*/
for(int i=0; i<=index; i++){
if(arr[i]==value){
b = true;//表明value已经存在数组中了
break;
}
}

//判断b是否为false,如果为false,说明value不存在数组中
if(!b){
//把value填入当前index对应的元素空间中
arr[index++] = value;
}
}
showArray(arr);
}

//遍历数组
public static void showArray(int[] arr){
//遍历格式[1,2,3,4,5,6]
for(int i=0; i<arr.length; i++){
//首先判断数组长度是否等于1
if(arr.length==1){
System.out.println("["+arr[i]+"]");
}else if(i==0){//是第一元素
System.out.print("["+arr[i]+",");
}else if(i==arr.length-1){//是最后一个元素
System.out.println(arr[i]+"]");
}else{
System.out.print(arr[i]+",");
}
}
}
}


4.编写一个程序,读入10个人的考试分数,并且判断有多少个分数高于或等于平均分,有多少个分数低于平均分。

  输入886输入结束,假设最高分为100

import java.util.Scanner;
public class Test4 {


public static void main(String[] args){
/*4.编写一个程序,读入10个人的考试分数,并且判断有多少个分数高于或等于平均分,有多少个分数低于平均分。
输入886输入结束,假设最高分为100*/
Scanner sc = new Scanner(System.in);
float[] arr = new float[10];
//定义一个变量用于保存平均分
float avg = 0;
for(int i=0; i<arr.length; i++){
System.out.println("请输入第"+(i+1)+"个学生的成绩:");
float score = sc.nextFloat();
if(score==886){
break;
}else if(score<0 || score>100){
continue;
}
arr[i] = score;
avg += score;
}

//求出平均值
avg /= arr.length;

//定义一个变量用于保存高于或等于平均分的人数
int count = 0;
//定义一个变量用于保存低于平均分
int count2 = 0;
for(int i=0; i<arr.length; i++){
if(arr[i]>=avg){
count++;
}else{
count2++;
}
}
System.out.println("平均分是:"+avg);
System.out.println("高于或者等于平均分的人数:"+count);
System.out.println("低于平均分的人数:"+count2);
}
}

5.数组查表法(根据键盘录入索引,查找对应星期)

import java.util.Scanner;
public class Test5 {
public static void main(String[] args){
//5.数组查表法(根据键盘录入索引,查找对应星期)
Scanner sc = new Scanner(System.in);
System.out.println("请输入要查找的星期:");
int week = sc.nextInt();

if(week<1 || week>7){
System.out.println("你要查找的星期不存在");
return;
}

//定义一个数组
String[] weeks = {"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
System.out.println(weeks[week-1]);//因为数组的索引是从0开始的,而我们输入的数是从1开始的,所以需要减1
}
}

 6.数组元素查找(查找指定元素第一次在数组中出现的索引)

import java.util.Scanner;
public class Test6 {
public static void main(String[] args){
//6.数组元素查找(查找指定元素第一次在数组中出现的索引)
Scanner sc = new Scanner(System.in);
System.out.println("请输入要查找的元素值:");
int key = sc.nextInt();

int[] arr = {11,0,10,-100,22,3};

int location = searchKey(arr,key);

//根据location的值判断key是否存在数组中
if(-1==location){
System.out.println("你要查找的元素不在该数组中");
}else{
System.out.println("你要查找的元素在该数组中的索引位置是:"+location);
}
}

//6.数组元素查找(查找指定元素第一次在数组中出现的索引)
public static int searchKey(int[] arr,int key){
//定义一个变量用于保存key在数组中的位置
int location = -1;//因为索引没有负值

//遍历数组查找指定元素
for(int i=0; i<arr.length; i++){
if(arr[i]==key){
location = i;//i就是要查找的索引,而且是第一次出现的索引
break;
}
}
return location;
}
}

6.打印杨辉三角

/*
打印杨辉三角形(行数可以键盘录入):
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1 
1 5 10 10 5 1
分析:
1.整体杨辉三角形可以看成一个二维数组,每一行看成一个一维数组
2.每一行的第一个和最后一个值都是1
3.从第三行开始,第二列一直到倒数第二列的值=上一行同一列的值+上一行前一列的值
4.是第几行就输出几列

第一件事情是要把二维数组中的一维数组中的元素填上值,然后遍历输出
*/
import java.util.Scanner;
class ArrayTest2{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入要打印的杨辉三角行数:");
int n = sc.nextInt();

//1.整体杨辉三角形可以看成一个二维数组,每一行看成一个一维数组
int[][] arr = new int[n][n];
//2.每一行的第一个和最后一个值都是1
for(int i=0; i<arr.length; i++){
arr[i][0] = 1;//每个一维数组的第一个元素值
arr[i][i] = 1;//每一个一位数组需要输出的最后一个元素值
}

//3.从第三行开始,第二列一直到倒数第二列的值=上一行同一列的值+上一行前一列的值
for(int i=2; i<arr.length; i++){
//第二列一直到倒数第二列的值=上一行同一列的值+上一行前一列的值
for(int j=1; j<arr[i].length-1; j++){
arr[i][j] = arr[i-1][j]+arr[i-1][j-1];
}
}

//4.是第几行就输出几列
for(int i=0; i<arr.length; i++){
int[] temp = arr[i];//取出来的一维数组
for(int j=0; j<=i; j++){
System.out.print(temp[j]+"\t");
}
System.out.println();//输出一行之后换行
}
}
}

7.打印100-1000之间的水仙花数

class Test{
public static void main(String[] args){
//打印出100-999所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身
//求出个位值,十位值,百位值
for(int i=100; i<1000; i++){
//个位值
int ge = i%10;
//十位值
int shi = i/10%10;
//百位值
int bai = i/100%10;
if((ge*ge*ge+shi*shi*shi+bai*bai*bai)==i){
System.out.println(i);
}
}
/*
153
370
371
407
*/
}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值