· #Java测试题
1.jdk jre jvm三者之间的关系,以及jdk,jre包含的主要结构有哪些?
jdk>>jre>>jvm
JDK= JRE+Java的开发工具(javac.exe,java.exe javadoc.exe)
jrk=jam+java核心类库
2.为什么要配置path环境变量
在任何路径下都可以执行java开发工具
3.常见的几个命令行操作都有哪些?
cd
md
rd
del
cd …
cd/
4.创建如下类,使得运行结果如下
public class Test{
public static void main(String[] args){
System.out.println(“姓名:昭浅”+"n");
System.out.println(“性别:男”);
System.out.println(“家庭住址:China”);
}
}
5.字符串练习
public class StringTest{
public static void main(String[] args){
//练习1 判断对错
//String str1=4; //false
String str2=3.5f+""; true
System.out.println(str2); //true
System.out.println(3+4+"hello!");//true 7hello
System.out.println("hello!"+3+4); //true hello34
System.out.println('a'+1+4);//true 102
System.out.println("hello"+'a'+1); //true helloa1
//练习2
char c ='a';// a=97 A=65
int num=10;
String str="hello";
System.out.println(c+num+str);//107hello
System.out.println(c+str+num);//ahello10
System.out.println(c+(num+str));//s10hello
System.out.println((c+num)+str);//107hello
System.out.println(str+num+c);//hello10a
//练习3
System.out.println("* *"); //* *
System.out.println('*'+'t'+'*');//93
System.out.println('*'+"t"+'*');//* *
System.out.println('*'+'t'+"*");//51*
System.out.println('*'+('t'+"*"));//* *
}
}
数据类型转换练习
public class ShortTest{
public static void main(String[] args){
short s=5;
s=s-2; //判断 :no
byte b =3;
b=b+4; //判断 : no
b=(byte)(b+4); //判断: yes
char c ='a';
int i=5;
float d=.341f; //定义一个0.341的float类型
double result=c+i+d; //判断:yes
byte h=5;
short z=3;
short t=h+z; //判断: no
}
}
-
标识符的命名规则有哪些?
答:驼峰命名法,不能用空格,不能使用但可以包含关键字和保留字,不能使用数字开头,区分大小写 -
标识符的命名规范有哪些
答:包名:xxxyyyzzz
类名、接口名:XxxYyyZzz(大驼峰)
变量名、方法名:xxxYyyZzz(小驼峰)
常量名:XXX_YYY_ZZZ
3.Java变量按照数据类型怎么划分?并指出java的基本数字类型有哪8种?并指出各自占用的内存空间大小
答:(1)整形,浮点型、字符型、布尔型、引用数据类型:类、接口、数组 、String
(2)int、short、long、byte、float、double boolean(false true) char
4.说明基本数据类型变量之间自动类型提升的运算规则
答:byte、short、char→int→long→float→double
5 .说明基本数据类型变量之间的强制类型转换的使用规则和强制转换可能出现的问题
答:容量大→容量小
强制转换前要注意高精度向低精度转换时是否会丢失精度
运算符程序练习
- &和&&的异同
答:&与&&
相同点 :一假则假,
不同点: &在左边遇到false时,右边 会继续运行
&&在左边遇到false时,右边不会执行,会直接结束
public class LogicTest2{
public static void main(String[] args){
boolean x= true;
boolean y =false;
short z= 40;
if((z++ == 40) && (y = true)){ //z=41 y=true 这个是赋值符号,不要被误导了
z++; //z=42
}
if((x = false) || (++z == 43)){ //z=43
z++; //z=44
}
System.out.println("z="+z); //z=44
}
}
结果为: z=44
3.定义三个int型变量并赋值,使用三元运算符或者if-else获取这三个数中的较大数的实现
public class LogicTest{
public static void main(String[] args){
int x=3,y=13,z=4;
int max=x>y? (x>z ? x : z) : (y>z ? y :z);
System.out.println("max="+max);
if(x>y){
if(x>z)
System.out.println("x最大");
else
System.out.println("z最大");
}
else {
if(y>z)
System.out.println("y最大");
else
System.out.println("z最大");
}
}
}
4.编写程序,声明2个double 型变量并赋值,判断第一个数大于10.0,且第二个数小于20.0 打印两数之和,否则,打印两数的乘积
double n=13.0;
double m=15.0;
if((n>10.0) && (m<20.0)) {
double num=n+m;
System.out.println("结果为:"+num);
}
else {
double num=n*m;
System.out.println("结果为:"+num);
}
5.交换两个变量值的代码的实现
int num1 = 10;
int num2 = 14;
int temp = 0;
temp=num1;
num1=num2;
num2=temp;
System.out.println("num1:"+num1);
System.out.println("num2:"+num2);
6.你能否写出最高效的 2 * 8 的实现方式
答: 2 << 3 或 8 << 1
if- else 结构测试题
1.月小鹏参加java考试,他和父亲达成承诺
如果:
成绩为100分时,奖励一台电脑
成绩为(80,90]时,奖励一部手机
成绩为[60, 80]时,奖励一台平板电脑
成绩为其他时,什么都没有
请从键盘输入月小鹏的期末成绩,并加以判断
import java.util.Scanner;
public class IfelseTest {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入月小鹏的成绩:");
int exam= scan.nextInt();
if(exam>=60) {
if(exam<=80) {
System.out.println("奖励一个平板电脑");
}
else if(exam>80 && exam<=99) {
System.out.println("奖励一台手机");
}
else if(exam == 100) {
System.out.println("奖励一台电脑");
}
}else System.out.println("不及格,一顿胖揍");
}
}
2.从键盘输入三个整数分别存入num1、num2、num3对他们进行排序(使用if-else) 并且从小到大输出
int num1 = scan.nextInt();
int num2 = scan.nextInt();
int num3 = scan.nextInt();
if(num1>num2) {
if(num1>num3) {
System.out.println("num1最大");
}
else System.out.println("num3最大");
}else if(num2>num3) {
System.out.println("num2最大");
}else System.out.println("num3最大");
3.我家的狗5岁了,5岁的狗相当于人类的多大呢,其实,狗的前两年相当于人类的10.5岁,之后每增加一年,就增加四岁,那么5岁的狗相当于人类的多少年龄呢,应该是:10.5+10.5+4+4+4=33岁。
编写一个程序,获取用户输入的狗的年龄,通过程序显示其相当于人类的年龄,如果用户输入的为负数,请显示一个提示信息
Scanner scan = new Scanner(System.in);
System.out.println("请输入狗的年龄");
int age = scan.nextInt();
if(age>=0) {
if(age<=2) {
double dogAge=age*10.5;
System.out.println("狗的真实年龄为:"+dogAge);
}else {
double dogAge=2*10.5+(age-2)*4;
System.out.println("狗的真实年龄为:"+dogAge);
}
}else System.out.println("请输入正确的年龄");
临时学习
如何获取随机数
public class RandomTest {
public static void main(String[] args) {
//如何获取一个随机数
//调用random方法获取随机数
//在Math类中有一个random方法,Math.random()
//此方法会在[0.0,1.0)中随机取值,返回值为double类型
//所以,在我们使用的过程中,如果想在一段范围内随机取值,需要我们自行去分配区间
double value = Math.random();//从[0.0,1.0)中随机取值
//如何在区间[10,100)中随机取值呢 --》10--99
int value1= (int)(Math.random()*90+10);//在10-99之间随机取值[10,100)
//强转返回int类型
// random方法返回值公式 :
// [a,b] : (int)(Math.random()*(b-a+1)+a)
}
}
if-else和switch之间的问题
1.switch后面的表达式可以是哪些数据类型:
答 :byte、short、char、int、枚举类型、String类型
2.使用swtich语句改写下列if语句
int a = 3; int x = 100; if(a==1) x+=5; else if(a==2) x+=10; else if(a==3) x+=16; else x+=34;
//改写后:
int a = 3;
int x = 100;
switch(a){
case 1:
x+=5;
break;
case 2:
x+=10;
break;
case 3:
x+=16;
break;
default :
x+=34;
break;
}
3.谈谈对三元运算符,if-else ,switch-case结构使用场景的理解
答:在可以同时使用三种方式的同时,可以先优先使用三元和switch,因为三元和switch的执行效率稍微高一些,三元和switch都可以转化成if-else,反之则不成立
4.如何从控制台获取String和int型的变量并输出,使用代码实现?
import java.util.Scanner;//要先导入Scanner包,可以获取我们从控制台输入的变量
public class Test{
public static void main(String[] args){
Scanner scan=new Scanner(System.in);//在main方法中,将Scanner实例化为对象scan
String a=scan.next(); //用String类型变量a接受字符串
//注意:Scanner没有获取char类型的方法
}
}
5.使用for循环遍历100以内的奇数,并计算所有的奇数的和并输出
public class Test{
public static void main(String[] args){
int sum = 0;
for(int i=0;i<=100;i++){
if(i%2==1){
sum+=i;
System.out.println(i+"是奇数");
}
}
System.out.println("100以内奇数的和为:"+sum);
}
}
6.break关键字的使用
输入两个正整数m和n,求其最大公约数和最小公倍数
比如12和20的最大公约数是4,最小公倍数是60
import java.util.Scanner;
public class BreakTest{
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
System.out.println("请输入第一个数:");
int m=scan.nextInt();
System.out.println("请输入第二个数:");
int n=scan.nextInt();
for(int i=1;i<=99999;i++){
if(i%m==0 && i%n==0){
System.out.println(m+"和"+n+"的最小公倍数为"+i);
break;
}
}
for(int i=99999;i>=1;i--){
if(m%i==0 && n%i==0){
System.out.println(m+"和"+n+"的最大公约数为"+i);
break;
}
}
}
}
7.如图输出一下以下菱形图形
for(int i=1;i<=5;i++) {
for(int j=5;j>=i;j--) {
System.out.print(" ");
}
for(int m=1;m<=i;m++) {
System.out.print("* ");
}
System.out.println();
}
for(int i=1;i<=5;i++) {
for(int j=1;j<=i;j++) {
System.out.print(" ");
}
for(int m=5;m>=i;m--) {
System.out.print("* ");
}
System.out.println();
}
项目一
做一个程序, 存款余额程序,计入自己的存款,支出,余额,退出程序
package Question;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
String[][] notes=new String[10][4];
notes[0][0]="收支";
notes[0][1]="账户金额";
notes[0][2]="收支金额";
notes[0][3]="说 明";
int all=0;
boolean isFlag=true;
while(isFlag) {
System.out.println("__________"+"家庭收支记账软件"+"__________");
System.out.println();
System.out.print(" ");
System.out.println("1 收支明细");
System.out.print(" ");
System.out.println("2 登记收入");
System.out.print(" ");
System.out.println("3 登记支出");
System.out.print(" ");
System.out.println("4 退 出");
System.out.println("请选择(1-4):");
int select=scan.nextInt();
switch(select){
case 1:
System.out.println("__________"+"当前收支计入明细"+"__________");
for(int i=0;i<5;i++) {
for(int j=0;j<=3;j++) {
if(notes[i][j]==null) {
break;
}else{
System.out.print(notes[i][j]+"t");
}
}
System.out.println();
}
System.out.println("--------------------------------------------");
break;
case 2:
System.out.println("2 登记收入");
System.out.print("本次收入金额:");
int income=scan.nextInt();
System.out.print("本次收入说明:");
String inexplain=scan.next();
for(int i=0;i<5;i++) {
if(notes[i][0]==null) {
notes[i][0]="收入";
all=all+income;
notes[i][1]=String.valueOf(all);
notes[i][2]=String.valueOf(income);
notes[i][3]=inexplain;
break;
}
}
System.out.println("__________"+"登记完成"+"__________");
break;
case 3:
System.out.println("3 登记支出");
System.out.print("本次支出金额:");
int pay=scan.nextInt();
System.out.print("本次支出说明:");
String outexplain=scan.next();
for(int i=0;i<5;i++) {
if(notes[i][0]==null) {
notes[i][0]="支出";
if(all>=pay){
all=all-pay;
notes[i][1]=String.valueOf(all);
notes[i][2]=String.valueOf(pay);
notes[i][3]=outexplain;
System.out.println("__________"+"登记完成"+"__________");
break;
}
if(all
循环结构问题
1.循环结构是如何最后退出循环的,有哪些不同的情况说明?
答:①循环结构中,当循环条件不满足或循环体执行结束后退出循环,
②也可以添加break指令结束循环(continue:结束当次循环 return:结束方法的指令)
2.标签指令练习
laber: for(int i=1;i<=4;i++){
for(int j=1;j<=10;j++ ){
if(j%4==0) {
continue laber;
}
System.out.print(j);
}
System.out.println();
}
3.求1000以内的所有完数,(一个数如果恰好等于他的出去本身的因子之和,这个数就称为完数)
package Question;
//求1000以内的所有完数,(一个数如果恰好等于他的出去本身的因子之和,这个数就称为完数)
public class Test2 {
public static void main(String[] args) {
int sum=0;
for(int i=1;i<=1000;i++) {
for(int j=1;j
4.说明break和continue使用上的相同点和不同点
答:相同点:在循环结构中使用,都有跳转的功能
不同点:break :跳出当前循环
continue:跳出本次循环
5.从控制台输出如下结构
public class ForTest {
public static void main(String[] args) {
for(int i=6;i>=1;i--) {
for(int j=1;j<=i;j++) {
System.out.print("*");
}
System.out.println();
}
}
}
数组类型问题
一维数组习题
1.读出代码中该人的电话号码
int[] arr=new int[] {8,2,1,0,3};
int[] index = new int[] {2,0,3,2,4,0,1,3,2,3,3};
String tel="";
for(int i=0;i
2
Scanner scan = new Scanner(System.in);
System.out.print("请输入学生人数");
int num=scan.nextInt();
System.out.println("请输入"+num+"个人的成绩");
int[] score = new int[num];
for(int i=0;imax) {
max=score[i];
}
}
System.out.println("最高分是"+max);
for(int i=0;i=max-10) {
System.out.println("student "+i+" score is "+score[i]+" grade is A");
}else if(score[i]>=max-20 && score[i]<=max-10) {
System.out.println("student "+i+" score is "+score[i]+" grade is B");
}else if(score[i]>=max-30 && score[i]<=max-20) {
System.out.println("student "+i+" score is "+score[i]+" grade is C");
}else System.out.println("student "+i+" score is "+score[i]+" grade is D");
}
1.写出一维数组初始化的两种方式
一:
int[] arr = new int[]{1,2,3};
二:
int[] arr = new int[3];
arr[]={1,2,3};
2.写出二维数组初始化的两种方式
一:
int[][] arr =new int[][]{{1,2},{3,4},{5,6}};
二:
int[][] arr =new int[3][4];
三:
int[][] arr = new int[3][];
arr[0]=new int[4];
arr[1]=new int[4];
arr[2]=new int[4];
3.如何遍历如下的二维数组
int[][] arr = new int[][]{{1,2,3},{4,5},{6,7,8}};
for(int i=0;i
4、不同类型的一维数组元素的默认初始化值是多少`
int类型:0
浮点类型:0.0
char类型:0或'/u0000'
boolean类型:false
引用数据类型:null
5、一维数组的内存解析
String[] strs = news String[5];//定义长度为5的引用数据类型数组
strs[2] = "Tom"; //为数组中的第二位赋值为 Tom
strs = new String[3]; //重定义数组长度为3 数组地址指向新地址,旧长度数组没有利用被回收
多维数组的练习
1、
int[][] arr = new int[][]{{3,5,8},{12,9},{7,0,6,4}};
int sum=0;
for(int i=0;i
2、
答案 : B、E
数组类型的常见算法
1、杨辉三角练习
public class ArrayTest2 {
public static void main(String[] args) {
int[][] arr= new int[10][];//定义一个外层数组为10
for(int i=0;i
2.面试练习题,一维数组
创建一个长度为6的int型数组,要求数组元素的值都在1-30之间,且是随机赋值,同时,要求元素的值各不相同
import java.util.Random;
public class ArrayTest {
public static void main(String[] args) {
Random random = new Random();
int[] arr=new int[6];
for(int i=0;i
3、回型数
package Question;
import java.util.Scanner;
public class Array1 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num=scan.nextInt();
int[][] arr = new int[num][num];
int i=0,j=0,sum=1;
int min=0,max=num-1;
while(imin)
j--;
}else {
arr[i][j]=sum;
if(j==min && i>min) {
i--;
}
}
if(i==min+1 && j==min) {
sum++;
arr[i][j]=sum;
min++;
max--;
}
if(sum==num*num) {
break;
}
}
for(int m=0;m
4、定义一个长度为10的一维数组,定义一些随机数存入数组中 ,求所有元素的最大值,最小值,总和。平均值,(要求:所有随机数都为二位数)
import java.util.Random;
public class ArrayTest3 {
public static void main(String[] args) {
Random random = new Random();
int[] arr = new int[10];
for(int i=0;iarr[i]) {
min=arr[i];
}
sum+=arr[i];
}
System.out.println("最大值:"+max);
System.out.println("最小值:"+min);
System.out.println("平均值:"+sum/arr.length);
System.out.println("总和:"+sum);
}
}
数组的复制、反转、查找(现行查找。二分法查找)
练习:使用简单数组 数组复制
①创建一个名为ArrayTest的类,在main()方法中声明array1和array2两个变量,他们是int[]类型的数据
②使用大括号{}把array1初始化为8个素数:2,3,5,7,11,13,17,19
③显示array1的内容
④赋值array2变量等于array1,修改array2中的偶索引元素,使其等于索引值,如(array[0]=0,array[2]=2)打印出array1
思考: array1和array2是什么关系?
答:array1和array2地址值相同,都指向堆空间的唯一的一个数组实体
拓展:怎么实现array2对array1的复制
array2=new int[array1.length];
for(int i=0;i
array2[i]=array1[i];
}
int[] array1,array2;//①
array1=new int[] {2,3,5,7,13,17,19};//②
for(int i=0;i
数组的反转
//数组的练习
//数组的反转练习
public class Array2 {
public static void main(String[] args) {
//数组的反转
String[] arr=new String[] {"a","b","c","d","e","f"};
String temp="";
int length=arr.length-1;
for(int i=0;ilength) {
break;
}
}
for(int i=0;i
数组的查找
遍历查找
String[] arr=new String[]{"a","b","c","d","e"};
String find="c";
boolean isFlag=false;
for(int i=0;i
二分法查找:(注意二分法查找,所查找的数组必须是有序)
int[] arr1=new int[] {1,2,3,4,5,6,7};
int find1=2;
int head=0;
int end=arr1.length-1;
int middle=0;
boolean Flag=true;
while(head<=end) {
middle=(head+end)/2;
if(find1==arr1[middle]) {
System.out.println("找到了,位置在"+middle);
Flag=false;
break;
}else if(find1>arr1[middle]) {
head=middle+1;
}else {
end=middle-1;
}
}
if(Flag) {
System.out.println("没有找到");
}
eclipse快捷键
数组的常用算法题
1、冒泡排序算法题:
import java.util.Arrays;
public class BubbleTest {
public static void main(String[] args) {
int[] arr = new int[] {10,30,20,40,70,60,50,80};
for(int i=0;iarr[j+1]) {
int temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
}
for(int i=0;i
2、如何反转上面的数组,请实现
int length=arr.length-1;
for(int i=0;i
3、复制上述数组
//复制数组
int[] arr2=new int[arr.length];
for(int i=0;i
4、线性查找,查询22是否存在于数组中
//线性查找(遍历查找)找出22是否存在与数组中,返回提示信息
for(int i=0;i
5、数组中常见的异常:
//数组中常见的异常有:角标越界异常、空指针异常(指定的数组地址为空或元素为null时发生空指针异常)



