java基础题练习

1、什么是java字节码?

    它是程序的一种低级表示,可以运行在java的虚拟机上。将程序抽象为字节码可以保证java程序员的代码可以运行在各种设备上。

2、Math.abs(-2147483648)的返回值是什么?

    -2147483648。(整数溢出的典型例子)

3、如何将一个double变量初始化为无穷大?

   java的内置常数:Double.POSITIVE_INFINITY 和 Double.NEGATIVE_INFINITY;

4、java表达式1/0和1.0/0.0的值是什么?

public static void main(String[] args) {
	System.out.println(1.0/0.0);
	System.out.println(1/0);
}

5、for循环和它的while循环形式的区别

for 循环 中递增变量在循环结束后一般都是不可用的 ,但是在while循环中,递增变量在循环结束后仍然可用。这常常是for循环和它对应while循环的主要区别

6、What does the following do?

public static void  negate(int a) {
	a = -a;
}
public static void  negateS(String s) {
	s =s+1;
}
public static void name(int[] arr) {
	int[] c=arr;
	c[1]=0;
}
public static void main(String[] args) {
	//基本数据类型
    int a = 17;
    System.out.println(a);
    negate(a);
    System.out.println(a);
    //字符串类型
    String s = "ss";
    System.out.println(s);
    negateS(s);
    System.out.println(s);
    //数组
    int[] arr = {1,2,3};
    for (int i : arr) {
		System.out.print(i+" ");
	}
    System.out.println();
    name(arr);
    for (int i : arr) {
		System.out.print(i+" ");
	}
    
}

 运行结果:

17
17
ss
ss
123
103

它打印17次两次。 函数不能在另一个函数中更改基本类型变量的值,调用方法传的是值。

打印了两次ss。字符串为final修饰的,内容不能改变,在negateS(String s)方法中可以看成是重新创了一个String变量保存了改变后的值,所有在mian()方法中的调用并没有对定义的ss变量影响,所以打印了两次ss。

对于数组,调用方法传的是数组的引用(数组地址),所有在name方法中对数组下标为1的值修改,最后会影响整个数组的值。所以打印出来的元素改变了的。

数组的传值和传地址:

基本数据类型用=号赋值都是值拷贝,修改某个值,不会影响另外一个变量。

但是数组与自定义对象和非final修饰的对象都是传地址,修改某个对象,会影响另一个对象。

7、下面这段程序打印出什么?

int f=0;
int g=1;
for (int i = 0; i <= 15; i++) {
	System.out.print(f+" ");
	f = f+g;
	g = f-g;
}

 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610   就是斐波那契数列Fibonacci sequence) 

分析:

 8、编写一段程序,将一个正整数n用二进制表示并转换为String型

java内置的方法:

Integer.toBinaryString(10) //1010

其他简洁方法:

public static String toBinaryStr(int n) {
	String str= "";
	for(int i=n;i>0; i/=2) 
		str =(i%2)+str;
	return str;
}

9、编写一个静态方法 lg(), 接受一个整型参数N,返回不大于log2(N)的最大整数。不要使用Math库。

	public static int lg(int n) {
		int a=2;
		int k=0;
		while(n>1) {
			n /=a;
			k++;
		}
		return k;
	}

10、使用欧几里得算法计算两个正整数的最大公约数并打印出每次递归调用时的两个参数。

public static int gcd(int p,int q) {
	if(p==1 && q==1) {
		System.out.println("p="+p+";q="+q);
		return 1;
	}
	if(p<q) { //保证第一个参数p比第二个参数大
		int tmp = p;
		p = q;
		q = tmp;
	}
	if(p%q ==0)
		return q;
	else {
		int r= p%q;
		System.out.println("p="+q+";q="+r);
		return gcd(q, r);
	}
		
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值