java笔试题_JAVA基础笔记和vivo笔试题笔记

本文档回顾了JAVA的基础知识,包括编写规则、面向对象特性、数组和容器。重点讲解了JAVA数组的创建、初始化及操作,同时也提到了字符串、容器(列表、集合和映射)的使用。此外,分享了vivo笔试题的答题策略,强调了时间分配和异常输入处理。题目示例涉及数组处理和生产任务计算问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

导言:

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

1.JAVA笔记

1)JAVA基础

JAVA没有指针。

JAVA编写规则:

import 

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[] {1,2,3,4,5};//花括号直接写内容,红色可写可不写。

//算法考察中一般数组是未知的,用第一种方法创建。如果一支,可以直接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之前的一个最大天数,就可以求解。

3a1b272f05a7812e138af49e04e73f59.png

找之间的规律。发现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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值