--------- 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学习型技术博客、期待与您交流! -----------