黑马程序员-JAVA基础测试题(1-5)

时间:2022-02-21 00:16:56

--------- android培训java培训java学习型技术博客、期待与您交流! ------------

1、编写程序计算12+22+32+....+1002的和.

class Test1
 {
static int sum=0;//把求和变量定义成静态变量,以便下面静态主函数引用。
public static void main(String[]agrs)
    {
            for(int i=12;i<=1002;i+=10)//利用for循环遍历1002以内的比12大整十的数,包括12。
{
                    sum=sum+i;//把遍历到的数进行循环相加求和。
             }
             System.out.println(sum);//打印求和结果。             
    }
 }

2.请列举您了解的一些排序算法,并用Java语言实现一个效率较高的

 我了解的一些排序算法:直接选择排序,冒泡排序,希尔排序等。
 这里实现一个效率较高的冒泡排序。
public class Test2 {
    public static void main(String[] args) {
            
            int[] str = {2,45,6,87,3,56,1,56};
            //打印数组元素
            printArray(str);
            //对数组进行排序
            bubbleSort(str);
            printArray(str);         
    }
//数组打印
    public static void printArray(int[] str) 

{         

   System.out.print("[");
            for (int i = 0; i < str.length; i++) {
                    if(i!=str.length-1)
                            System.out.print(str[i]+",");
                    else
                            System.out.println(str[i]+"]");                    
            }
    }
//冒泡排序:相邻的两个元素进行比较,每一圈的最值出现在最后,这里是最大值出现在最后。

public static void bubbleSort(int[] arr)

   {

      for  (int x=0;x<arr.length-1;x++)//控制比较的圈数

       {

          for(int y=0;y<arr.length-x-1;y++)//控制每圈比较的次数,-1是避免角标越界,-x是让每一次比较的元素减少

           {

                if(arr[y]>arr[y+1])

                 {

                   int temp=arr[y+1];

                      arr[y+1]=arr[y];

                   arr[y]=temp;

                 }

          }

   }

}

3、 以下代码哪个是正确的?为什么?
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. byte b = 1 + 1;  // 正确,因为1+1的和是2,刚好在-128~127之间,就赋值给了byte类型的b。

b. byte b = 1; b = b + 1; //错误,因为b+1在相加的时候有个自动类型提升的动作,
得出的值就变成了int型,就不能赋值给byte类型的b了。

c. byte b = 1; b = b += 1; //正确,b = b += 1这个运算是将b += 1的计算结果赋给b,
b += 1,其实等价于 b = (byte)(b+1);底层会对这个结果进行强制转换,注意这里是向下转换成byte型

而不是类型自动提升成int型,所以它编译的时候通过。
  
d. byte b = 1; b = ++b;//正确,b = ++b这个运算的过程是先进行++b的运算,再把运算后
的结果赋给b,++b计算后是一个int类型的,但是底层会进行一个强制转换,也就是说++b就相当
于 b = (byte)(b+1),所以这个编译也没有问题。


4:从键盘接受一个数字,打印该数字表示的时间,最大单位到天

 例如:
 键盘输入6,打印6秒
 键盘输入60,打印1分
 键盘输入66,打印1分6秒
 键盘输入666,打印11分6秒
 键盘输入3601,打印1小时1秒
import java.io.IOException;
import java.util.Scanner;       
public class Test4 

{
public static void main(String[] args) throws IOException

 { 
       Scanner s = new Scanner(System.in);  
       System.out.print("请输入秒数::");  
      int num ,second,minute,hour,day; 
       num = s.nextInt();  //获取键盘的输入数字
       System.out.print("键盘输入"+num+".......打印:");  
       if(num >0);                          
               if( num>=86400)  //判断天数
                    {  
                         day = num/86400;  
                          num = num -day*86400;  
                         System.out.print(day+"天");  
                    }  
               if(num<86400 && num>=3600)  //判断小时数
                         {  
                           hour = num/3600;  
                           num = num -hour*3600;  
                           System.out.print(hour+"小时");  
                        }  
               if(3600>num && num>=60)   //判断分钟数  
                       {  
                            minute = num/60;  
                           num = num -minute*60;  
                           System.out.print(minute+"分钟"); 
                       }  
               if(60>num && num>0)   //判断秒数
                       {  
                            second = num;

   System.out.print(second+"秒");  
                        }  
    else;
           {
               System.out.print("时间表示错误 ");  
           }

          }

}

5、 写出以下代码执行结果,分析为什么?(没有分析结果不得分)
        public class Test {
                public static void main(String[] args) {
                        String s = "abc";
                        s.substring(1);
                        s.replace("bc", "xyz");
                       System.out.println(s); 
                       String value = new String ("abc");
                       System.out.println(s == value);
                }
       }
结果是:abc
          false

 分析:
   字符串一旦初始化,就不可以再改变,s.substring()是获取s的一个子串,没有改变s的内容;
   s.replace("bc","xyz")是将s进行内容替换,修改后变成新的字符串,并不是将原来的字符串直接修改。
   两个方法操作都是产生新的字符串,并未直接改变s的内容,所以输出的仍然是abc.
  “s==value”比较的是字符串s和value的地址值,他们是两个不同的对象,在内存中的地址值是不同的,所以打印结果是false.


-------------- android培训java培训java学习型技术博客、期待与您交流! -----------