导言:

由于学JAVA还是三年前,虽然当时学得不错,但现在已经忘得差不多,所以对本科的PPT进行了复习,主要涉及到JAVA的基础编写规则,面向对象特性,数组,JAVA容器(主要是列表,集合和映射)。JAVA多线程等知识点并未复习,之后如有需要会进行复习。其中,应重点关注JAVA数组,JAVA容器和JAVA基础。其余的目前看来,不在考点之内。除了JAVA基础的复习,还有vivo的2道笔试真题。

1.JAVA笔记

1)JAVA基础

JAVA没有指针。

JAVA编写规则:



import 语句//常见的有import java.util.*;牛客网的编辑界面自带。包含JAVA容器等类
//java.lang包含了MATH,Character,String等基本操作,不需要引用。如Math.PI,Math.sqrt(),Math.pow(x,3)
/*java.io.*是输入输出语句,如有需要,需要自己在编辑界面写上,
常用到的函数是System.out.println("  ")、System.out.print()、其中,括号里可以加任何东西,
字符用单引号,字符串用双引号(保守起见拿不稳的用双引号),
int,double,float等直接写,并且用加号连接,‘+’操作会自动将它们变成字符串输出。
常用到的输入函数时System.in.read(),读入一个字符。*/
class 主类名称{
    public static void main(String[] args){  
//包含main函数的是主类,文件名为主类名。在牛客网的编辑界面,
//通常class名称为Solution,包含一个方法public 返回值类型 solution(参数类型 参数变量名){},
//花括号内由考试者填写方法,不需要自己写主函数啥的。
        //方法体
}
}



JAVA的变量名命名原则:字母,下划线和$开头,以字母,下划线,$和数字组成的序列。区分带消协。关键字不能作为变量名。(int,final,class,public)

JAVA包括基本数据类型和类。类可继承。基础数据类型不可继承。如char是基础数据类型,Character是类。

JAVA用final声明常量:

final float PI=3.1415926;//PI也可以直接用Math.PI调用

final int max=1000;

JAVA的%也可以对浮点数运算,C/C++只能对整数运算。

3.14%2.5=0.64

JAVA的“+”号可以连接任何数据,将他们转换成字符类型

举例:int x=5;char ch='a';double d=3.14;System.out.println(“”+x+ch+d);

JAVA的break和continue:

break跳出所有嵌套循环;continue设置标号T,并通过continue T跳到标号T处,开始下一次循环。

例:



T:  for(i=1;i<3;i++){
      ...
      continue T;
       ...
}



2)面向对象

区分类和对象:每个对象都是唯一的,单独分配内存;对象具有属性和行为,它们之间进行消息发送;对象都属于某个类。

类的构造函数:默认构造函数无具体实现,只有空大括号{};构造函数可不写;自定义构造函数括号里要写类型;构造函数无返回值,但不用写void。

其余抽象类,类的封装,继承,多态相关知识点不赘述。

3)数组

数组的创建:int[] x = new int[5] //是方括号不是小括号( ),默认初始化为5个0,[0,0,0,0,0]

数组的初始化:int[] a = new int[]

//算法考察中一般数组是未知的,用第一种方法创建。如果一支,可以直接int[] a={1,2,3,4,5};

数组可使用的方法:x.length ,获得长度

二维数组的创建:



int[][] a=new int[5][3];
//数组必须制定长度,或者在大括号中有多少个元素 就有多长,一维数组同理。
int[][] a=new int[5][];
int a[0]=new int[2];
...
a[4]=new int[1];
//定义不等长二维数组;第二行可以不写,只初始化行就可以,列的大小,以及数组的内容可以不设置,直接用。



二维数组的长度:a.length//行 a[1].length//列

Character字符类:

char a;/Character b=new Character('a');

字符类的方法:



int compareTo(Character)比大小,返回值大于0则大,如int val=c1.compareTo(c2);
boolean f=c1.equals(c2);是否相等
//其他方法不做赘述



字符串类:

String str="China";

String类方法:



int len=str.length();
char c=str.charAt(2);//位置2处的字符,'i'
int val=s1.compareTo(s2);
boolean f=s1.equals(s2);
String str2=str1.substring(1,4)//1,2,3,位置的字符
//其他方法不做赘述



注意:字符串“a”;字符'a'。

4)JAVA容器

原因:数组大小类型不可变。

通用操作:add,remove,clear,size,iterator

注意:不能像数组一样a[i]=5;必须用a.add(5)

iterator的用法:

t=a.iterator()

t.hasNext()//是否还有元素

t.Next()//读取一个对象

集合 Set:

无序,不重复,一次输出一个样,不能按照索引访问。

HashSet a = new HashSet()

按照哈希算法找,速度快

方法:



boolean f = a.isEmpty()
boolean f = a.contains(5);//是否含有一个对象,任意类型都可以,'b',“SHE”
有重复项,则add只导入一个



列表List:

有顺序,可重复,查询快,可以根据索引查找,比起数组,有很多方法

  • ArrayList
public  ArrayList(int  initCapacity){ }
Public void  add( Object  o){}//在末尾
Public void  add( int index,Object o){}//在指定位置
public Object  get(int index){}
Public int indexOf(object o){}//第一次出现o的位置
Public int  lastIndexOf(object o){}//最后一次出现o的位置
void removeRange(int begin,int end){}
public object[] toArray(){}//变成数组



  • Stack(堆栈列表)
void push(Object o)
Object pop()
int search(Object o)
boolean empty()
Object elementSt(int index)



  • List可以排序:sort(List a)对list中的元素进行自然排序

映射Map:

HashMap



put(a,a-b);
get("");
System.out.print(a.get("name").toString()); //输出



2.vivo2020笔试题

1)时间安排

如果一道题是30min,那么10分钟思考思路,10分钟代码,10分钟调试。

如果思考没有结果,立马结束,不拖延时间。

2)考虑输入数据的异常输入情况

3)数组的初始化是int[] a=new int[5],而不是(5)

4)

题目一:

对于一个数组n,找到一个最小的m,使得m的每位相乘结果等于n,并输出m;如果没有输出-1。

例:100->455

思路:相乘等于一个数字,首先想到公约数。数字最小,想到位数越少数字越小,所以应该从大的开始除。每一位应该是1-9,0的话成绩为0了,所以应该从9开始。

整理成算法:从9开始,除以9有余数,那么不做处理,除以8试试;除以9没有余数,说明9是公约数,那么就对n/9做相同的处理。

应该分成n大于10和小于10两种情况。

关键代码:

return solution(n/i)*10+i;

5)

题目二:

工厂做工,第一天生产1件,之后两天每天生产2件(第2,3天),之后三天每天生产3件(第4,5,6天),问,输入一个天数m,总共生产了多少件。

例:11->35

思路:首先画图列一下天数和生产情况,可以得到每个生产情况对应着一个最大天数,只要找到 m之前的一个最大天数,就可以求解。




java map put 不执行 java map import_java map put 不执行


找之间的规律。发现2列的数字比发现1多1,由此可见,对于生产情况i来说:

  • i*(i+1)/2=max_day;
  • 生产总数为i*i。

算法思路:由于前面的要算在总数里,所以从小开始循环。i=1->m,计算m与max_day的关系,如果max_day小于m,那么就加上i*i;如果大于,就计算超过了几天,加上去。

关键代码:

pn=pn+i*(m-(i-1)*i) //加上之前的,并加上这次的,这次的等于这次的每日生产量i*(天数m-上一次的最大生产天数(i-1)*i)