1、使用循环输出九九乘法表。
public class Test
{
public static void main(String[] args)
{
for(int i = 1; i < 10; i++ )
{
for(int j = 1; j <=i; j++)
{
System.out.print(" "+i +" x "+j+" = "+(i*j));
if (i!=j)
{
System.out.print(",");
}
}
System.out.println("");
}
}
}
2、根据给定的层数,使用循环输出等腰三角形。
import java.util.*;
public class Test
{
public static void main(String[] args)
{
Scanner scanner = new Scanner(System.in);
System.out.println("请输入等腰三角形的层数:");
int level = scanner.nextInt();//level是等腰三角形的层数
for(int i=0; i
3、给定半径输出圆形。
需要注意的是,计算距离中心轴的距离的时候,需要用四舍五入,这样的圆形更好看,还有就是最外层的循环建议采取+2的方式,+1的话将输出一个椭圆
import java.util.*;
public class Test
{
public static void main(String[] args)
{
Scanner scanner = new Scanner(System.in);
System.out.println("请输入圆的半径");
int radis = scanner.nextInt();
//先打印一个半圆出来
for(int i = -radis ; i <= radis; i+=2)//以一个字符为单位,
{
//先计算,每行星号距离中心轴的距离是多少
//勾股定理:半径的平方减去(半径-i)的平方再开方,
// 将返回值转换成整型,因为只能打印整数个字符
//System.out.println("看看具体数据:"+Math.sqrt(Math.pow(radis, 2) - Math.pow(i , 2)));
int mid = (int) Math.round(Math.sqrt(Math.pow(radis, 2) - Math.pow(i , 2)));//应该使用round来四舍五入,这样才会更好看
//System.out.println("*距离中间轴的距离:"+mid);
//然后打印radis - mid个空格
for(int j = 0; j < radis - mid; j++)
{
System.out.print(" ");
}
//再打印一个*
System.out.print("*");
//在打印两倍的mid个空格
for(int j = 0 ; j < 2 * mid; j++)
{
System.out.print(" ");
}
//再打印一个*
System.out.println("*");
}
}
}
4、实现一个按照字节来截取字符串的子串方法。
其实书里的题目没有说的更清楚,所以有两种理解。
其一:如果汉字被截断则将一半的汉字编程char拼接在后面,输出。
其二:来自网上的一个博客,就是web应用为了符合长度限制,所以要按照字节截取,汉字被分割成两半就抛弃掉,不显示。
我感觉其一可能更符合作者的意思。
这里将两种解法都贴上
其一解法
import java.util.*;
public class Test
{
public static void main(String[] args)
{
subString("你好好看abc123",0, 3 );
}
public static void subString(String s , int from , int to)
{
try
{
String str = s;
byte[] bytes = str.getBytes("Unicode");
//将字符串转化成一个个字节,
//这样的byte是把不论中文还是英文都解码成两个字节,
//中文两个字节都有用到,而英文第一个字节都设置为0000000
//bytes[0]和bytes[1]是标志位,值分别为-2和-1,
// 所以可以做一个判断,i = 0 ; bytes[i%2 = 0]=0也就是偶数位置为0的话,
// 就是英文字符,否则是中文字符。而我们截断的话,就是针对开头和结尾
// 如果开头为偶数的话,就不用管,否则要从下一位开始,之前那一位就用char加在前面
// 如果结尾是奇数的话就不用管,否则要在前一位就结束,
int f = 2+from;
int t = 2+to;
if(f % 2 == 1)
{
//如果是开头是奇数
f +=1 ;
}
if ( t % 2 == 1)//如果结尾也是奇数,为什么这么检查,因为不包含尾巴这个字符串
{
t -= 1;
}
System.out.println(f+":"+t);
String temp = new String(bytes, f,t-f,"Unicode");
if(from % 2==1)
{
temp = (char)bytes[from+2] + temp;
}
if(to % 2 == 1)
{
temp = temp + (char) bytes[to+2];
}
System.out.println(temp);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
其二解法
import java.util.*;
public class Test
{
public static void main(String[] args)
{
subString("你好好看abc123",0, 5 );
}
public static void subString(String s , int from , int to)
{
try
{
String str = s;
byte[] bytes = str.getBytes("Unicode");
//将字符串转化成一个个字节,
//这样的byte是把不论中文还是英文都解码成两个字节,
//中文两个字节都有用到,而英文第一个字节都设置为0000000
//bytes[0]和bytes[1]是标志位,值分别为-2和-1,
// 所以可以做一个判断,i = 0 ; bytes[i%2 = 0]=0也就是偶数位置为0的话,
// 就是英文字符,否则是中文字符。而我们截断的话,就是针对开头和结尾
// 如果开头为偶数的话,就不用管,否则要从下一位开始,之前那一位就用char加在前面
// 如果结尾是奇数的话就不用管,否则要在前一位就结束,
int f = 2+from;
int t = 2+to;
if(f % 2 == 1)
{
//如果是开头是奇数,就不要前面那一半了
f +=1 ;
}
if ( t % 2 == 1)//如果结尾也是奇数,为什么这么检查,因为不包含尾巴这个字符串
{
t -= 1;//就不要后面那一半了
}
System.out.println(f+":"+t);
String temp = new String(bytes, f,t-f,"Unicode");
System.out.println(temp);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
5、编写一个程序,将浮点数转换成人民币读法字符串。
6、编写控制台的五子棋游戏。
补充习题
1、使用Arrays中的方法,并记录时间比较普通方法和并行方法之间的时间差距。



