黑马基础测试题答案(二)



/**
第一题:从键盘接受一个数字,打印该数字表示的时间,最大单位到天,例如:
 键盘输入6,打印6秒;
 键盘输入60,打印1分;
 键盘输入66,打印1分6秒;
 键盘输入666,打印11分6秒;
 键盘输入3601,打印1小时1秒
*/
import java.util.Scanner;
public class Test1 {
        public static void main(String[] args){
                Scanner input=new Scanner(System.in);    //键盘输入
                System.out.println("请输入数字i:");     
    int i=input.nextInt();    //接收i
    int s=i%60;       //秒
                int m=i/60%60;   //分钟
                int h=i/3600%60; //小时
                int d=i/3600/24; //天
                 if (i>=86400){     
       System.out.println(d+"天"+h+"小时"+m+"分钟"+s+"秒");
    }else if(i>=3600&&i<86400){    
                         System.out.println(h+"小时"+m+"分钟"+s+"秒");
    }else if (i>=60&&i<3600){
                         System.out.println(m+"分钟"+s+"秒");
    }else if (i>=0&&i<60){                       
       System.out.println(s+"秒");
                 }       
        }
        }

/**
第二题:编写一个函数,函数内输出一个字符串,并在主函数内调用它。
*/
public class Test2{
 public static void string()//调用主函数里的string方法
  {
  System.out.println("黑马程序员欢迎您!");
 }
 public static void main(String [] args){
  string();
  }
}

/**
第三题:为什么需要配置path,什么时候需要classpath?
答:
1、配置path是为了方便可以再任意一个路径下去执行所要执行的可执行文件。
2、如果没有配置path的话,那么每次执行exe文件时就都需要每次输入其所在的路径,但是如果我们配置了path则不需要再每次都输入其所在的目录。
3、当需要运行一个较复杂的类时,需要调用JAVA内部类,这时JAVA虚拟机就会到classpath指定的地方去寻找这些类。这时就需要配置classpath.
*/

/**
第四题:定义一个二维int数组,编写代码获取最小元素。
*/


class Test4{
 public static void main(String  args[]){
  //自定义一个数组
        int num[][] = {{75, 5, 23, 76 },{564, 45, 452, 511 },{ 55,99, 1,22, 33 },{213,546,23,}};
        int Min=num[0][0];//定义一个最小值数组
  //依次遍历比较
  for (int a = 0; a < num.length; a++) {
            for (int b = 0; b< num[a].length; b++) {
                if(num[a][b]<Min)Min=num[a][b];//全局最小值
            }
  }
        System.out.println("最小值:"+Min);//输出最小值
    }
}

import java.util.ArrayList;
import java.util.List;
@SuppressWarnings("unchecked")
/**
第五题:数组去重复,例如: 原始数组是{4,2,4,6,1,2,4,7,8},得到结果{4,2,6,1,7,8}
*/
public class Test5{
   
        public static void main(String[] args) {
  //创建原始数组
        int[] arr = { 4, 2, 4, 6, 1, 2, 4, 7, 8 };
        //创建对象
        List list = new ArrayList();
        //增强for
        for (int num : arr) {
            if (!list.contains(num)) {
                list.add(num);
            }
        }
        //打印数组
        System.out.println(list);
    }
}

/**
第六题:写出以下代码执行结果,分析为什么?(没有分析结果不得分)
  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
        分析:
  第一个:System.out.println(s);
                字符串是常量,一般是存放在字符串常量池中一旦初始化就不会再改变,s.substring(1)和s.replace("bc","xyz")并未改变s的值,所以输出的仍是abc.
  第二个:System.out.println(s == value);
                ==比较的是字符串s和value的地址值,他们是两个不同的对象,在内存中的地址值是不同的,所以打
        印结果是false.

/**
第七题:编写程序,打印1到100之内的整数,但数字中包含7的要跳过例如:17、27、71、72
*/
class Test7
{
 public static void main(String[] args) {
                遍历1-100所有的数
               for(int i=1;i<=100;i++){
     //索引所有包含7的数
     if( (i+"").indexOf("7")==-1)

      System.out.println(i);
    }
 }
}

/**
第八题:在打印语句中如何打印这3个x变量?
  class A {
                    int x = 1;
                    class B {
                        int x = 2;
                        void func() {
                            int x = 3;
                           System.out.println( ? );
                        }
                    }
                }
*/
第一种:
System.out.println(new A().x + "," + new B().x + "," + x);
第二种:
System.out.println( A.this.x );
System.out.println( B.this.x );
System.out.println( x );

/**
第九题:编写程序,该程序启动后用户可以按"yyy-MM-dd"的格式输入一个日期,程序计算这一天是星期几,并且计算出是一年中的第几天。
*/
import java.io.*; 
import java.text.*; 
import java.util.Date;
public class Test9 {
public static void main(String[] args) throws NumberFormatException, IOException {
System.out.println("开始输入日期:"); 
 int month = 0,day = 0; 
 long year = 0;   
 //从键盘读取数据,建立转换流 
 BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); 
 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); 
  
 String s  = null; 
 StringBuffer sb = new StringBuffer(); 
 while((s = bf.readLine())!=null){ 
  //年数 
  year = Integer.valueOf(s.substring(0,4)); 
  if(Integer.valueOf(s.substring(4,5)) == 0){ 
  //月数 
   month = Integer.valueOf(s.substring(5,6)); 
  } 
  else{ 
   if(Integer.valueOf(s.substring(4,6)) <= 12) 
    month = Integer.valueOf(s.substring(4,6)); 
   else 
   System.out.println("月份输入错误"); 
  } 
  //当前月天数 
  if( Integer.valueOf(s.substring(6))<31)
  {
  day = Integer.valueOf(s.substring(6)); 
  }
  else{System.out.println("你输入的天数有错");}
  
  //调用Day方法算出天数 
  System.out.println(year+"年"+month+"月"+day+"日"); 
         System.out.println("第"+Day(year,month,day)+"天"); 
         WeekDay(s); 
   }
}
public static void WeekDay(String day){   
 String[] str ={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"}; 
 DateFormat  df = new SimpleDateFormat("yyyyMMdd");//日期格式化辅助类   
 Date  d = new Date();          
           try{ 
               d  =  df.parse(day);//格式化日期  
           }catch(ParseException   e){ 
               e.printStackTrace(); 
           }   
           for(int i=0;i<str.length;i++){ 
               if(d.getDay()==(i))    //根据取出来的数判断取数组下标 
               { 
                   System.out.println(str[i]); 
               } 
           } 

 
public static int Day(long year,int month,int day){ 
 int dateSum1 = 0; 
 for (int i = 1; i < month; i++){ 
     switch(i){ 
     //当月份为1,3,5,7,8,,10,12时,自动加31天 
      case 1: case 3: case 5: case 7: case 8:  case 10:  
      case 12:dateSum1 += 31; break; 
      //当月份为4,6,9,11时,自动加30天 
      case 4: case 6: case 9: case 11:dateSum1 += 30; break; 
       case 2:  
       // 判断是否为闰年,如果是加29,否加28 
        if((   (year % 4 == 0) & (year % 100 != 0)) | (year % 400 == 0)| dateSum1<30)
     
         dateSum1 += 29; 
        else dateSum1 += 28;             
     } 
  }    
  return dateSum1+day; 
 } 
 

/**
第十题:一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。
当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,
则不会发生这种问题。编程解决猫狗鱼过河问题。
*/

import java.util.ArrayList;
import java.util.List;
public class Test10 {
        public static void main(String[] args) {
    // 1:因为数据长度频繁的改变所以用集合来装数据。并且将河的两边比喻为两个不同的集合
    // left :表示左边的河岸 right:表示右边的河岸也就是对岸。
                List<String> left = new ArrayList<String>();
                List<String> right = new ArrayList<String>();
   // 2:因为一开始河的左岸就是有人和三个动物的,所以程序一加载就应该添加他们
                left.add( "猫" );
                left.add( "狗" );
                left.add( "鱼" );
               
                int useBoat = 0;
                String animal = null;
               
                while( !left.isEmpty() ){
                    useBoat++;
                        animal = null;
                        if( 1 == useBoat % 2 ){
                                for( int i = 0; i < left.size(); i++ ){
                                        animal = left.remove( i );
                                        if( lossAnimal(left) ){
                                                left.add( animal );
                                                continue;
                                        }else{
                                                break;
                                        }
                                }
                                System.out.println( "第" + useBoat + "次, 老农用船将" + animal + "运到河右岸" );
                                right.add( animal );
                        }else {                       
                                while( lossAnimal(right) ){
                                        for( int i = 0; i < right.size(); i++ ){
                                                 animal = right.remove( i );
                                                 if( lossAnimal(right) ){
                                                         right.add( animal );
                                                         continue;
                                                 }else{
                                                         break;
                                                 }
                                   }
                                }
                           if( animal == null ){
                                   System.out.println( "第" + useBoat + "次, 老农用船回到河左岸" );
                           }else{
                               System.out.println( "第" + useBoat + "次, 老农用船将" + animal + "运回河左岸" );
                               left.add( animal );
                           }
                        }
                }
        }
       
        public static boolean lossAnimal( List<String> list ){
                if( list.contains("猫") && list.contains("狗") ){
                        return true;
                }else if( list.contains("猫") && list.contains("鱼") ){
                        return true;
                }else{
                        return false;
                }                       
        }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值