黑马程序员——Java基础测试题

来源:互联网 发布:动态模拟软件 编辑:程序博客网 时间:2024/06/05 03:17

   ------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");      }  }  



0 0
原创粉丝点击