------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
黑马程序员——Java基础测试题
第1题:以下代码哪个是正确的?为什么?
a. byte b = 1 + 1;
b. byte b = 1; b = b + 1;
c. byte b = 1; b = b += 1;
d. byte b = 1; b = ++b;
答:选项a是对的,定义b为byte型,且值为2。
选项b是错的,b+1的结果默认转换为int型,int型不能直接转换为byte型,需强制转换。
应改为:byte b=1;b=(byte)(b+1);
选项c是对的,b+=1包含了一个隐藏的类型转换,相当于 b=(byte)(b+1);
选项d是对的,b=++b也包含了一个隐藏的类型转换。
第2题:创建ArrayList对象,添加5个元素,使用Iterator遍历输出
<span style="font-size:18px;">import java.util.ArrayList;
import java.util.Iterator;
public class Test2
{
public static void main(String[] args)
{
//创建ArrayList对象
ArrayList<String> al = new ArrayList<String>();
//对al集合添加5个元素
al.add("1");
al.add("2");
al.add("3");
al.add("4");
al.add("5");
//获取迭代器
Iterator<String> it = al.iterator();
//循环迭代器
while(it.hasNext()) //如果有下一个值,进入循环
{
//得到迭代器中下一个值
String el = it.next();
//输出结果
System.out.println(el);
}
}
} </span>
第3题:什么情况下适合用UDP协议,什么情况下适合用TCP协议?
答:UDP: (1)UDP是一个无连接协议,传输数据之前源端和终端不建立连接。
(2)由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,
因此一台服务机可同时向多个客户机传输相同的消息。
(3)因无连接,是不可靠的协议。
(4)UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。
(5)UDP是面向报文的。
在有些情况下UDP协议可能会变得非常有用。因为UDP具有TCP所望尘莫及的速度优势。
主要用于视频会议聊天什么的,一些缺少点数据无关紧要,可靠性要求低,传输经济的应用。
TCP: (1)建立连接,形成传输数据的通道。
(2)在连接中进行大数据传输。
(3)通过三次握手完成连接,是可靠协议。
(4)因为必须建立连接,所以效率会稍低。
要用于数据下载,文件传输,可靠性要求高的应用。
第4题:为什么需要配置path,什么时候需要classpath?
答:在java中,用path配置,path则是先找当前目录,之后再去path环境变量里面目录去找.
配置path是为了方便在任何目录下都可以执行所要执行的文件, 当我们运行javac.exe,如果我们没有配置话,
我们要执行javac.exe的时候就需要每次输入其所在的目录, 但是如果我们配置了path则不需要再每次都输入其所在的目录,
此时便可以再任意一个目录下去执行javac.exe。 如果是java文件则用classPath配置.这样就可以再任意目录下去执行这个java文件.
虚拟机在查找class文件时如果没有设置classpath会在当前目录查找.临时配置classpath时,如果设置classPath时写";"的情况下,
那么就会在当前目录下找该文件,之后再在classPath配置目录找要运行的文件,如果不加";"的话,只会在classPath中找。
第5题:编程打印所有的3位质数,质数特点:只能被1和其本身整除
public class Test5
{
public static void main(String[] args)
{
zhishu();
}
public static void zhishu()
{
//判断是否是质数。
//三位质数从100开始到1000结束。
for(int i = 100; i < 1000; i++ ) {
int factors = 0;
for(int j = 1; j < (i + 2)/2; j++ )
{
// 将 i 依次除以 1 到 [(i + 2)/2]
// 计算其整除的次数
if((i % j) == 0) factors++;
}
// 如果只有一次整除,那么该数为素数
if(factors < 2)
System.out.println(i+"为质数");
}
}
}
第6题:数组去重复,例如: 原始数组是{4,2,4,6,1,2,4,7,8},得到结果{4,2,6,1,7,8}
<span style="font-size:18px;">import java.util.Arrays;
public class Test6 {
public static void main(String[] args) {
int arr[]={4,2,4,6,1,2,4,7,8};
System.out.println("原始数组:[4,2,4,6,1,2,4,7,8]");
System.out.println("去重复后的数组:"+Arrays.toString(repeat(arr))); //将去重后数组打印出来
}
public static int[] repeat(int [] arr){
boolean flag[] = new boolean[arr.length];/*定义一个和目标数组长度一样的boolean类型,此数组用作标示,用于获取不重复元素的个数的标志位</span><span style="font-size:18px; font-family: Arial, Helvetica, sans-serif;">*/</span>
<span style="font-size:18px;">
for (int i = 0; i < flag.length; i++) {/*遍历数组,查找重复的元素。循环结束后,重复的元素对应的标志位置都为true。</span><span style="font-family: Arial, Helvetica, sans-serif;font-size:18px;">*/</span><span style="font-size:18px;">
</span><span style="font-size:18px;">
</span><span style="font-size:18px;font-family: Arial, Helvetica, sans-serif;"> </span><span style="font-size:18px; font-family: Arial, Helvetica, sans-serif;"> if (flag[i]) //如果这个元素对应的标志位已被置为true,则返回循环继续检查下一个元素。</span>
<span style="font-size:18px;"> continue; for (int j = i+1; j < flag.length; j++) { //后边元素和此位置上的元素比较, if (arr[j]==arr[i]) { //如果后边元素和前边元素相同, flag [j]=true; //则此重复元素对应的标志位置为true } } } int count=0; //计数器,记录不重复元素的个数 for (int i = 0; i < flag.length; i++) { //算出不重复元素的个数,记为count, if (!flag[i]) { //标志位依然为false的对应元素即为不重复的元素 count++; } } int index=0; int [] arrNew = new int [count]; //定义新数组,元素个数为count。 for (int i = 0; i < arr.length; i++) { //将所有不重复的元素存入新数组中 if (!flag[i]) { arrNew[index++]=arr[i]; } } return arrNew; //返回数组 }}</span>
第7题:用控制台程序倒着输出九九乘法表;输出结果按下图所示:
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
……
1*3=3 2*3=6 3*3=9
1*2=2 2*2=4
1*1=1
<span style="font-size:18px;">public class Test7
{
public static void main(String[] args)
{
print99();//调用打印乘法表函数
}
public static void print99()//定义一个函数打印乘法表
{
for(int x=9;x>0;x--) //控制输出的行数
{
for(int y=1;y<=x;y++)//控制输出的列数
{
System.out.print(y+"*"+x+"="+x*y+"\t");
}
System.out.println();//打印完一行后换行
}
}
}</span>
第8题:定义一个包含私有成员变量和函数的类,再定义一个内部类,在内部类函数中访问外部成员量,
并调用外部函数。在外部类函数中创建内部类对象,调用内部类函数。
public class Test8 {
//定义包含私有成员变量和函数
private int x= 1;
private void funOut(){
System.out.println("外部函数运行:" + x);
}
class Inner { // 定义内部类
private int x;
Inner(int in){
x = in;
}
public void funInner() {
System.out.println("内部函数运行");
System.out.println("x=" +x); // 内部类访问外部内的成员变量和函数()
funOut();
}
}
public void print() { //在外部类函数中创建内部类对象,调用内部类函数
Inner in = new Inner(x);
in.funInner();
}
public static void main(String[] args) {
Test8 t = new Test8();
t.print();
}
}
第9题:编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期,
程序计算这一天是星期几,并且计算出是一年中的第几天。
import java.util.Date;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class Test9
{
public static void main(String[] args) throws ParseException, IOException
{
System.out.println("Please input a date as yyyy-MM-dd format");
//获取键盘录入
String input = new BufferedReader(new InputStreamReader(System.in)).readLine();
//用给定的模式和日期符号构造 SimpleDateFormat
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
//把输入字符串解释为日期和时间的表示形式,返回指示的时间
Date date = format.parse(input);
//定义一个日历对象c
Calendar c = Calendar.getInstance();
// 将日历字段设置为给定值
c.setTime(date);
System.out.println("Your input date is :" + date.toString());
System.out.println("it's " + c.get(Calendar.DAY_OF_YEAR) + " th day in this year");
}
}