多维数组
二维数组的声明:
Int [][]a = { {1} , {1,2} , {1,2,3} };
或:
Int [][]a = new int [2][];
a[0] = {1,2,3};
a[1] = {4,5,6};
多维数组的迭代:
int [][] b1 = new int [][]{{1,2},{3,4}};
for(int i =0; i<b1.length; i++){
for(int j =0; j<b1[i].length; j++){
System.out.print(b1[i][j]);
}
}
数组拷贝的静态方法:
arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
例题:
int[] a={10,100,1000}; //定义数组a
int[] b={20,200,2000,20000}; //定义数组b
System.arraycopy(a, 1, b, 2, 2); //从a的第2位(1+1)开始拷贝,步长为2,到b的第3位(2+1),其余溢出
for(int x:b){
System.out.println(x); //输出结果为20 200 100 1000
}
数组的优缺点:
优点:越界检查
缺点:长度一经定义,不能更改。
九九乘法表
public static void main(String[] args) {
int i; //i为行变量
int j; //j为列变量
int sum; //sum为和变量
for(i=1;i<=9;i++){
for(j=1;j<=9&&i>=j;j++) {
//不输出和的情况
//System.out.print(i+"*"+j+' ');
sum=i+j; //输出和的情况
System.out.print(i+"*"+j+"="+sum);
//利用空格对齐,sum大于10空两格,sum小于10空三格
if (sum<10) {
System.out.print(" ");
}
else {
System.out.print(" ");
}
}
//j循环结束换行
System.out.println("");
}
}
斐波那契数列
public static void main(String[]args) {
int month = 8; //随机输入月份数
int sum1 = 1; //初始化第一个月
int sum2 = 1; //初始化第二个月
int sum3 = sum1+sum2; //某个月的兔子总数
int i = 1; //计数器
//1月、2月的兔子总数
switch (month){
case 1: System.out.println(sum1); break;
case 2: System.out.println(sum2); break;
default: break;
}
//其他月份的兔子总数
for(i=1;i<=month;i++) {
if(i>2) {
sum3 = sum1 + sum2; //某个月的兔子总数=前两个月兔子数之和
sum1 = sum2; //将前两个月的兔子数初始化为新的值
sum2 = sum3;
if ( (i==month) && (month!=2) ) {
System.out.println(sum3); //输出某个月的兔子总数
}
}
}
}
1到100的素数及其个数
public static void main(String[] args) {
int j=2; //初始化假定因子(除数)
int i=1; //计数器,已包含素数2
int x = 3; //初始化3~100的某数(被除数)
System.out.println(2); //输出素数2
for (x=3;x<100;x++) { //从3到100递增,步长为1
for (j=2;j<x;j++) { //除数递增,步长为1,直到除数等于被除数时停止
if (x%j== 0) { //某数对假定因子取模,值一旦为0即跳出循环
break;
}
if (j==x-1) { //假定因子一直从2增长到x-1,一直未跳出循环,说明该数无真因子。
System.out.println(x); //输出该素数
i++; //输出计数器统计的数
}
}
}
System.out.println(i); //输出素数的个数
}
完数
public static void main(String[] args) {
int i = 1; //某数的第一个因子,也当做因子之和
int j = 2; //初始化因子
int x = 2; //初始化1~10000的某数
for (x=2;x<10000;x++) { //寻找完数
i=1;
for (j=2;j<x;j++) { //寻找因子
if (x%j==0) {
i+=j;
}
}
if (x==i) { //和相同时输出
System.out.println(x);
}
}
}
4*4数组旋转90度
public static void main(String[] args) {
int i=0,j=0; //利用i,j访问每个位置
int [][] a = {
{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}
}; //创建一个二维数组,行与列均占5个位置,(其中一个存放长度4)
for (i=0;i<a.length;i++) {
for (j=0;j<a[i].length;j++) {
System.out.print(a[i][j]+" ");
}
System.out.println("");
}
System.out.println("");
for (i=3;i<a.length;i--) {
for (j=0;j<a[i].length;j++) {
System.out.print(a[j][i]+" ");
}
System.out.println("");
}
}
杨辉三角
public static void main(String[] args) {
int i=0; //行变量
int j=0; //列变量
int [][]a = new int [8][8] ; //定义一个二维数组
a[0][0] = 1;
a[0][1] = 1;
a[1][1] = 1; //初始化前两行
System.out.println(a[0][0]);
for (i=2;i<=a.length;i++) { //第三行开始
for (j=1;j<=i;j++) {
a[i][j]=a[i-1][j-1]+a[i-1][j]; //某数等于上一行同列的数+上一行前一列的数
System.out.print(a[i][j]+" ");
}
System.out.println("");
}
}
pi的近似值
//pi/2 = 1+1/3+1/3*2/5 + 1/3*2/5*3/7 + 1/3*2/5*3/7*4/9+.....
public static void main(String[] args) {
double i=1.0;
double j=3;
double pi=1.0;
double a = 1.0/3;
for(i=2.0,j=5;i<=100;i++,j+=2) {
pi = pi + a;
a = a * ( i / j);
}
System.out.println(2*pi);
}
获得某年某月的最大天数
int i = 1992; //定义年
int j = 2; //定义月
switch (j){
case 1: System.out.println(i+"年"+j+"月有31天"); break;
case 2:
if ( ( (i%4==0) && (i%100!=0) ) || (i%400==0) ) { //判断是否为闰年
System.out.println(i+"年"+j+"月有29天");
}
else
System.out.println(i+"年"+j+"月有28天"); break;
case 3: System.out.println(i+"年"+j+"月有31天"); break;
case 4: System.out.println(i+"年"+j+"月有30天"); break;
case 5: System.out.println(i+"年"+j+"月有31天"); break;
case 6: System.out.println(i+"年"+j+"月有30天"); break;
case 7: System.out.println(i+"年"+j+"月有31天"); break;
case 8: System.out.println(i+"年"+j+"月有31天"); break;
case 9: System.out.println(i+"年"+j+"月有30天"); break;
case 10: System.out.println(i+"年"+j+"月有31天"); break;
case 11: System.out.println(i+"年"+j+"月有30天"); break;
case 12: System.out.println(i+"年"+j+"月有31天");
}
{
}
}
输入某年某月某日,判断这一天是这一年的第几天?
public static void main(String[] args) {
int year=1992;
int month=2; //定义年月日
int day=28;
int x=1;
switch(month) {
case 1: x = day; break;
case 2: x = day+31; break;
case 3: //加入闰年因素
if ( ( (year%4==0) && (year%100!=0) ) || (year%400==0) ) {
x = day+60;
break;
}
else{
x = day+59;
break;
}
case 4:
if ( ( (year%4==0) && (year%100!=0) ) || (year%400==0) ) {
x = day+91;
break;
}
else{
x = day+90;
break;
}
case 5:
if ( ( (year%4==0) && (year%100!=0) ) || (year%400==0) ) {
x = day+121;
break;
}
else{
x = day+120;
break;
}
case 6:
if ( ( (year%4==0) && (year%100!=0) ) || (year%400==0) ) {
x = day+152;
break;
}
else{
x = day+151;
break;
}
case 7:
if ( ( (year%4==0) && (year%100!=0) ) || (year%400==0) ) {
x = day+182;
break;
}
else{
x = day+181;
break;
}
case 8:
if ( ( (year%4==0) && (year%100!=0) ) || (year%400==0) ) {
x = day+213;
break;
}
else{
x = day+212;
break;
}
case 9:
if ( ( (year%4==0) && (year%100!=0) ) || (year%400==0) ) {
x = day+244;
break;
}
else{
x = day+243;
break;
}
case 10:
if ( ( (year%4==0) && (year%100!=0) ) || (year%400==0) ) {
x = day+274;
break;
}
else{
x = day+273;
break;
}
case 11:
if ( ( (year%4==0) && (year%100!=0) ) || (year%400==0) ) {
x = day+305;
break;
}
else{
x = day+304;
break;
}
case 12:
if ( ( (year%4==0) && (year%100!=0) ) || (year%400==0) ) {
x = day+335;
break;
}
else{
x = day+334;
break;
}
}
System.out.println("这一天是"+year+"年的第"+x+"天");
}
}
求一个数的阶乘
public static void main(String[] args) {
int x; //计算x的阶乘
int y=1;
for (x=3;x>0;x--) {
y = y*x; //x*(x-1)*(x-2)*...*1
}
System.out.println(y);
}
将10进制的数转换为2进制输出
public static void main(String[] args) {
int x = 10;
int [] a = new int [8] ;
int i = 0;
for (i=0;i<a.length;i++) {
a[i] = x%2; //对二求模取余
x = x/2; //商值继续计算
}
for (i=7;i>=0;i--) {
System.out.print(a[i]);
}
}
猴子吃桃
public static void main(String[] args) {
int i; //i为天数
int sum=1;
for(i=1;i<=9;i++) { //共吃了9天
sum = 2*(sum + 1); //从后往前推断
}
System.out.println(sum);
}