java回形数代码,java回形数组

java实现回形填数 25 10 11 12 13 24 9 2 3

public class Test {

在故城等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供做网站、成都网站制作 网站设计制作定制制作,公司网站建设,企业网站建设,品牌网站设计,网络营销推广,成都外贸网站制作,故城网站建设费用合理。

public static void main(String[] args) {

int N = 5;//如果最大的数字是25的话就有5行5列

int M = N;//用去输出的for循环

int n = N - 1;//数组从0开始,所以下标比实际少1

int NN = N * N;//最大的那个数字,即25

int min = 0;//计数用,0为最外一层

int[][] a;//先在数组里面排列好

a = new int[100][100];

while(n  min) {

for(int i = min; i = n; i ++) {//当min=0时,即 25到21;当min=1时即10到7。。。

a[i][min] = NN;

NN --;

}

for(int i = min + 1; i = n; i ++) {//20到17

a[n][i] = NN;

NN --;

}

for(int i = n - 1; i = min; i --) {//16到13

a[i][n] = NN;

NN --;

}

for(int i = n - 1; i  min; i --) {//12到10

a[min][i] = NN;

NN --;

}

n -= 1;

min += 1;

}

a[n][n] = 1; //这一句应该可以不写的,但我程序出bug了,不想花太多时间解决

for(int i = 0; i  M; i ++){

for(int j = 0; j  M; j ++)

System.out.print(a[i][j] + "\t");

System.out.println();

}

}

}

结果如下

25 10 11 12 13

24 9 2 3 14

23 8 1 4 15

22 7 6 5 16

21 20 19 18 17

求java编程的代码

代码如下,望采纳

public class PrintPrime{

public static void main(String args[]){

//设置一个计数变量count,用于统计一行当中已经输出数字的个数

int count = 0;

//写代码时人为判断200为非素数,如果不考虑题目的严格要求的话,可以写成200

for(int i = 100;i=200;i++){

//判断数字是否为素数,若是,则count+1并输出数字

if(PrintPrime.IsPrime(i)){

count++;

System.out.print(i+" ");

}

//如果一行十个已经输出完毕,计数归零,换行

if(count==10){

count=0;

System.out.println();

}

}

}

//判断数字是否为素数

public static boolean IsPrime(int n){

//如果小于等于三,则大于一即为素数

if (n = 3) {

return n  1;

}

//从2循环到数字的开平方,算法优化

for(int i=2;i=Math.sqrt(n);i++){

if(n%i == 0)

return false;

}

return true;

}

}

一段有意思的java代码请大家解释~

原理很简单,因为在java中,int是占4个字节大小,double占8个字节的大小,当你把某变量乘以2的时候,在计算机里面的处理方式是左移一位。当使用浮点数进行乘法运算时,若结果很大,会以科学计数法表示。

下面具体分析:

1、表达式0x7FFFFFFF == (int)(0x7FFFFFFF * 2.0)

0x7FFFFFFF 已经占了4个字节,也就是int型的最大范围,以二进制表示出来为01111111 11111111 11111111 11111111

0X7FFFFFFF*2.0 计算出来的结果为double型,那么结果将会以科学计数法来表示,也就是4.294967294E9, 以二进制表示为0 11111111 11111111 11111111 11111110,以16进制表示为0xFF FF FF FE,注意,这里的计算结果并没有超出double的范围8字节。

(int)(0x7FFFFFFF * 2.0) 在上面已经看到0x7FFFFFFFF的二进制表示为01111111 11111111 11111111 11111111乘以2就表示左移一位,结果为0 11111111 11111111 11111111 11111110 (注意,这个数并未超出8字节的范围)然后再把结果强制转换为int型,也就是从最高位开始向下取4个字节,因此最后一位的0被丢弃(取double的最大值,因此丢弃最低位),最后结果以二进制表示为01111111 11111111 11111111 11111111,以16进制表示为0x7F FF FF FF,可以看到与0x7FFFFFFFF的相同,因此第一个表达式0x7FFFFFFF == (int)(0x7FFFFFFF * 2.0)反回true。

2、表达式(int)(0x7FFFFFFF * 2.0) == (int)(0x7FFFFFFF * 2)

(int)(0x7FFFFFFF * 2.0)这部分的结果在上面介绍过了,这里就不用介绍了,结果还是为0x7F FF FF FF。

(int)(0x7FFFFFFF * 2) 其中0x7FFFFFFF*2表示把0x7FFFFFFF左移一位,其二进制结果为0 11111111 11111111 11111111 11111110,因为最后为int型,计算结果超出4个字节,因此最高位的0被丢弃(int型的计算是抛弃最高位),结果为11111111 11111111 11111111 11111110,以16进制表示为0xFF FF FF FE与0x7FFFFFFF不相同,因此结果为false。

要注意,在计算机中数值是以补码的形式表示的(包括以上的计算结果全都是以补码表示的),补码知识不作介绍,这里只要知道,正数的被码就为原来的正数,而负数的补码为符号位不变,其余各位按位取反再加1。因此0xFF FF FF FE除符号位不变(在java中int型最高位为符号位),其余各位取反再加1,结果为10000000 00000000 00000000 00000010最后结果为-2,以16进制表示为0x80 00 00 02,因此使用print输出该数,则为-2,并不为0xFF FF FF FE的十进制数值。

3、表达式0x7FFFFF * 2.0== (int)(0x7FFFFF * 2)

因为两个数字计算的结果都没有出现超出int型的4个字节的情况,因此计算结果相同,这个就不介绍了,相信你应该明白了。

好了,现在相信你应该明白了


当前文章:java回形数代码,java回形数组
标题路径:http://hbruida.cn/article/dseedpd.html