黑马基础测试题整理

package com.itheima;
/**
 * 第1题:
 * 从键盘接受一个数字,打印该数字表示的时间,最大单位到天
例如:
键盘输入6,打印6秒
键盘输入60,打印1分
键盘输入66,打印1分6秒
键盘输入666,打印11分6秒
键盘输入3601,打印1小时1秒
键盘输入86440,打印1天40秒
 * @author AbuGe
 *
 */
import java.util.Scanner;
public class Test1
{
	public static Scanner sc; 
	public static void main(String[] args)
	{
		sc = new Scanner(System.in);
		while(true)
		{
			System.out.println("您输入的数字是:");
			int num = sc.nextInt();
			printTime(num);
		}

	}
	//将输入数字转换成对应的时间
	public static void printTime(int num)
	{
		int[] arr = new int[4];
		int pos = arr.length;
		while(num > 0)
		{
			int tmp = num % 60;
			arr[--pos] = tmp;
			num = num / 60;		
			//对小时进行处理(分秒是60进制,小时是24进制)
			if(24 <= arr[1] )
			{
				arr[0] = arr[1] / 24;
				arr[1] = arr[1] % 24;
			}
		}

			
		//遍历数组后,按格式输出
		for(int i = 0; i < arr.length; ++i)
		{
			if(arr[i] != 0)
			{
				switch(i)
				{
					case 0:System.out.print(arr[i] + " 天 "); break;
					case 1:System.out.print(arr[i] + " 时 "); break;
					case 2:System.out.print(arr[i] + " 分 "); break;
					case 3:System.out.print(arr[i] + " 秒 "); break;
					default:break;
				}
			}
		}

		System.out.println();
	}
}
/**
 * 第2题:为什么需要配置path,什么时候需要classpath?
 * @author AbuGe
 */

 *1.在我们使用cmd来使用JDK时,需要使用java,javac等,对于操作系统而言,当它要使用某个*.exe
 *时,会先从当前目录查找这个命令,若查不到OS就会到PATH所设定的路径去查找该命令,然后执行。这个path
 *也就是系统变量,它会告诉OS可执行文件(*.exe,*.bat)所在的路径。
 *当我我们使用JDK时,可以切换到JDK的bin目录下然后再编译,这样可以不设置path,但是比较麻烦,所以
 *我们将bin的路径添加到path中,这样我们就可以在任何 目录下使用javac和java的命令了
 *2.claasspath是专门针对java的,它就相当于OS的path,path针对整个OS,classpath告诉java虚拟机
 *(JVM)要使用或执行的*.class文件放在什么地方。所谓的JVM就像在当前OS下再激活另一个OS,对JVM来说classpath就是它的path
 *,所以JVM要运行程序需要设定classpath,即JVM需要像OS一样需要一个默认的查找class文件的路径。默认路径为英文的点,即“.”,表示
 *当前路径。在打包成jar或者调用其他包或者jar的时候classpath就显示出它的重要性了。默认情况下当前路径就可以了。
 *注:当前目录不是*.java和*.class文件所在文件夹时,javac时可以加上路径来编译,但是要在classpath中加入*.class的路径,否则JVM不能找到
 *这样才能直接运行,否则必须切换到*.class的目录才能执行。
 *


package com.itheima;
/**
 * 第3题:
 * 编程计算3乘8等于几,什么方法效率更高?
 * @author AbuGe
 *
 */
public class Test3 {
		public static void main(String[] args)
		{
			int result = getResult(3, 8);
			System.out.println("3 * 8 = " + result);
			int result_2 = getResult(8, 3);
			System.out.println("8 * 3 = " + result_2);
			//位运算效率最高
			int result_3 = getResult_2(3, 8);
			System.out.println("3 * 8 = " + result_3);

		}
		//运用累加
		public static int getResult(int base, int offset)
		{
			int result = 0;
			for(int i = 0; i < offset; i++)
			{
				result += base;
			}
			return result;
		}
		//位运算:3 * 8 = 3 * 2 * 2 * 2,因为乘以2就相当于左移一位,所以3 * 8即可由左移3位得到
		//位运算是CPU直接支持的,效率最高
		public static int getResult_2(int base, int offset)
		{
			int pos = 0;
			while(offset != 1)
			{
				offset = offset >> 1;
				pos++;
			}
			base = base << pos;
			return base;
		}
}

package com.itheima;
/**
 * 第4题: 以下代码哪个是正确的?为什么?
	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;正确
 * @author AbuGe
 */
类型转换:(java是强类型的语言)
 *byte:整型数据类型的一种,占8位从-128-127;
 *整型默认是int型占32位,即4个字节
 *a:
 *1 + 1 先运算得到2, 是常量int型并在byte范围内,然后默认进行强制类型转换int为byte赋值给byte型的b,故可以
 *b:
 *byte = 1;是正确地,是常量int型并在byte范围内,默认直接将int型的1强制转换为byte型的,
 *但是b = b + 1;
 *将byte型的1与int型的1进行运算,自动进行类型提升,即byte的1提升为int型的,运算后
 *得到的结果是个int型的占4个字节,不能将一个占四个字节的int型直接赋值给占一个字节的byte型
 *可以更正为b = (byte)(b + 2);
 *c:
 *+=默认进行了强转b先+1然后再赋值给 b
 *d:
 *自增是可以的,默认会进行类型强制转换


package com.itheima;
import java.util.Scanner;
/**
 *第5题: 声明一个类Person,包括两个成员变量:name,age。定义函数sayHello(),
 *调用时输出:我叫***,今年***岁了。声明类Chinese继承Person。
 * @author AbuGe
 */
class Person
{
	public String name;
	public int age;
	public void sayHello(String n, int a)
	{
		this.name = n;
		this.age = a;
		System.out.println("我叫" + name + ",今年" + age + "岁了。");
	}
}
class Chinese extends Person
{
	
}
public class Test5 
{
	private static Scanner sc;
	public static void main(String[] args)
	{
		Person p = new Person();
		sc = new Scanner(System.in);
		System.out.println("请输入您的姓名:");
		String name = sc.nextLine();
		System.out.println("请输入您的年龄:");
		int age = sc.nextInt();
		p.sayHello(name, age);
	}
}

package com.itheima;
/**
 * 第6题:用控制台倒着输出九九乘法表,输出结果如下图所示:
 *   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
 *变成打印所有的3位质数,质数特点:只能被和其本身整除
 * @author AbuGe
 */
public class Test6 {
	public static void print99(int num)
	{
		for(int x = 9; num <= x; --x)
		{
			for(int y = 1; y <= x; ++y)
			{
				System.out.print(y + " * " + x + " = " + (y * x) + "\t");
			}
			System.out.println();
		}	
	}
	public static void main(String[] args)
		{
			print99(1);
		}
}

package com.itheima;
/**
 * 第7题:编程打印所有的3位质数
 * 质数特点:只能被1和其本身整除
 * @author AbuGe
 */
public class Test7 {
	public static void main(String[] args) {
		//遍历了所有数
		printNum(100);
		//效率较高,只考虑奇数的情况即可
		System.out.println("--------------------------------------------------------");
		printNum_2(101);
	}
	public static void printNum(int num)
	{
		int i,j;
		for(i = num; i < 1000; ++i)
		{
			for(j = 2; j < i; ++j)
			{
				if(i % j == 0)
					break;
			}
			if(j ==i)
			System.out.println("i = " + i + " ");
		}
	}
	public static void printNum_2(int num)
	{
		boolean b;
		//除了2以外的所有偶数都不是质数,所以外循环只考虑奇数即可,而对于内循环最大只需考虑到其平方根即可用Math.sqrt(num)这个函数
		//求num的平方根,因为非质数的奇数只能分解为两个奇数相乘
		for(int i = num; i < 1000; i += 2)
		{
			b = true;
			for(int j = 3; j <= Math.sqrt(i); j += 2)
			{
				if(i % j == 0)
				{
					b = false;
					
					break;
				}
			}
			if(b)
			{
				System.out.println("i = " + i + " ");
			}
		}
	}
}

package com.itheima;
/**
 * 第8题:定义一个包含私有成员变量和函数的类,再定义一个内部类,在内部类函数中访问外部成员变量,
 * 并调用外部函数。在外部函数中创建内部类对象,调用内部类函数。
 * @author AbuGe
 */
public class Test8 
{
	private int num;
	private void func()
	{
		System.out.println("The num is: " + num);
	}
	public void VisitInner()
	{
		Inner innerobject = new Inner();
		innerobject.InnerFunc();
	}
	class Inner
	{	
		public void VisitOutter(int tmp)
		{
			num = tmp;
			func();
		}
		public void InnerFunc()
		{
			System.out.println("This is InnerFunc()!");
		}
	}
	//测试用例:
	public static void main(String[] args)
	{
		Test8 TestObject = new Test8();
		TestObject.new Inner().VisitOutter(20);
		TestObject.VisitInner();
	}
}

package com.itheima;
/**
 * 第9题:小明的妈妈每天会给他20元零花钱。平日里,小明先花掉一半,再把一半存起来。每到周日,小明拿到钱后会把所有零花钱花掉一半。
 * 请编程计算,从周一开始,小明需要多少天才能存够100元?
 * @author AbuGe
 *
 */
public class Test9 {
		public static void main(String[] args)
		{
			//定义两个变量:days用来统计天数
			//因为前六天每天可以存10元是固定的,故六天可以存60元,第七天拿到钱用掉一半;
			double sum = 0;
			int days = 0;
			while(sum < 100)
			{
				++days;
				if(days % 7 != 0)
				{
					sum += 10;
				}else if(days % 7 == 0)
				{
					sum = (sum + 20 ) / 2;
				}
			}
			System.out.println("小明需要" + days + "天,才能存够100元");
		}
}


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
黑马程序员训练营入学考试题 1、方法中的内部类能不能访问方法中的局部变量,为什么? 2、编写一个类,在main方法中定义一个Map对象(采用泛型),加入若干个对象,然后遍历并打印出各元素的key和value。 3、取出一个字符串中字母出现的次数。如:字符串:"abcdekka27qoq" ,输出格式为:a(2)b(1)k(2)... 4、有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。 5、编写一个程序,获取10个1至20的随机数,要求随机数不能重复。 6、编写三各类Ticket、SealWindow、TicketSealCenter分别代表票信息、售票窗口、售票中心。售票中心分配一定数量的票,由若干个售票窗口进行出售,利用你所学的线程知识来模拟此售票过程。 7、写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 ? 8、编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。这个程序要考虑输入的字符串不能转换成一个十进制整数的情况,并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。提示:十进制数转二进制数的方式是用这个数除以2,余数就是二进制数的最低位,接着再用得到的商作为被除数去除以2,这次得到的余数就是次低位,如此循环,直到被除数为0为止。其实,只要明白了打印出一个十进制数的每一位的方式(不断除以10,得到的余数就分别是个位,十位,百位),就很容易理解十进制数转二进制数的这种方式。 9、28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(需写出分析思路) 10、有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
1.方法中的内部类能不能访问方法中的局部变量,为什么? 2.分析运行结果,说明原理。(没有分析结果不得分) import java.util.ArrayList; class Data { int val; } public class Test { public static void main(String args[]) { Data data = new Data(); ArrayList list = new ArrayList(); for (int i = 100; i < 103; i++) { data.val = i; list.add(data); } for (Data d : list) { System.out.println(d.val); } } } 3.编写一个类,在main方法中定义一个Map对象(采用泛型), * 加入若干个对象,然后遍历并打印出各元素的key和value。 4.编写一个类,在main方法中定义一个Map对象(采用泛型), * 加入若干个对象,然后遍历并打印出各元素的key和value。 5.定义一个文件输入流,调用read(byte[] b)方法将exercise.txt * 文件中的所有内容打印出来(byte数组的大小限制为5)。 6.存在一个JavaBean,它包含以下几种可能的属性: 1:boolean/Boolean 2:int/Integer 3:String 4:double/Double 属性名未知,现在要给这些属性设置默认值,以下是要求的默认值: String类型的默认值为字符串 www.itheima.com int/Integer类型的默认值为100 boolean/Boolean类型的默认值为true double/Double的默认值为0.01D. 只需要设置带有getXxx/isXxx/setXxx方法的属性,非JavaBean属性不设置,请用代码实现 7.有一个类为ClassA,有一个类为ClassB,在ClassB中有一个方法b,此方法抛出异常, * 在ClassA类中有一个方法a,请在这个方法中调用b,然后抛出异常。 * 在客户端有一个类为TestC,有一个方法为c ,请在这个方法中捕捉异常的信息。 * 完成这个例子,请说出java中针对异常的处理机制。 8.编写一个程序,获取10个1至20的随机数,要求随机数不能重复。 9.编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数, * 然后打印出这个十进制整数对应的二进制形式。 * 这个程序要考虑输入的字符串不能转换成一个十进制整数的情况, * 并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。 * 提示:十进制数转二进制数的方式是用这个数除以2, * 余数就是二进制数的最低位,接着再用得到的商作为被除数去除以2, * 这次得到的余数就是次低位,如此循环,直到被除数为0为止。 * 其实,只要明白了打印出一个十进制数的每一位的方式 * (不断除以10,得到的余数就分别是个位,十位,百位), * 就很容易理解十进制数转二进制数的这种方式。 10.有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。 * 问:最后剩下的是100人中的第几个人?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值