/*
题目要求:总共打印8行,用五行分析一下解题思路吧;打印如下图形:
空格数:1 2 3 4
1 1
1 2 1 2
1 2 4 2 1 3
1 2 4 8 4 2 1 4
1 2 4 8 16 8 4 2 1 5
........
经上面的分析可得:该图形总共有5行: ————每一行由空格和具体的数字组成。
空格数是随着行数的增加而减一,因此该代码可写成:
for(int i=1;i<=5;i++){//i表示的是所打印的行数
for(int k=1;k<=5-i;k++){//k表示所打印的空格数
System.out.print(" ");
}
}
由上面可知,每一行的空格已打印,但是每一行的数字存在什么规律,以及每一行数字所要打印的个数:
1 2 3 4
1 1 1
2 1 2 1 2
3 1 2 4 2 1 3
4 1 2 4 8 4 2 1 4
5 1 2 4 8 16 8 4 2 1 5
2^0 2^1 2^2 2^3 2^4 2^3 2^2 2^1 2^0
-4 -3 -2 -1 0 1 2 3 4 x-(0) 1
x-(-1~1) 3
x-(-2~2) 5
x-(-3~3) 7
x-(-4~4) 9
........
因此由上面分析得每一行所打印数字的个数为1-i ~ i-1
并且每一行随打印的数值都是2的次幂,次幂的规律而是从0~4~0
第五行———— 所对应的坐标的绝对值与行数差了一个1
第四行———— 所对应的坐标的绝对值与行数差了一个1
第三行———— 所对应的坐标的绝对值与行数差了一个1
.......以此类推
因此在坐标的绝对值的基础上再加一个1与行数相等,正它们的差刚好是所对应每一行所要打印的第一个数值的次幂数,即2^(坐标的绝对值的基础上再加一个1与行数的差)
------因此代码可写为:
for(int m=1-i;m<=i-1;m++){
System.out.print(Math.abs(m)+1);
}
[注:再下来就是格式的要求——由于每一行所打印的最高位数值所占的大小为三个空格大小,因此就有输出的格式要求——————代码就可改为:
System.out.printf("%3.0f",Math.pow(2,i-1-Math.abs(k)));
特别提醒:为什么格式输出是%3.0f,因为Math.pow()——所执行的结果直接为double型,所以为%f,至于4,就是所输出的值所占的空格大小。
]
最后如果改成输入多少行就打印多少行,则只需改代码中的数字五变成一个变量。
*/
class Demo16{
public static void main(String[] args){
for(int i=1;i<=5;i++){//i表示的是行数
for(int j=1;j<=5-i;j++){
System.out.print(" ");
}
for(int k=1-i;k<=i-1;k++){
System.out.printf("%4.0f",Math.pow(2,i-1-Math.abs(k)));
}
System.out.println();
}
}
}
import java.util.Scanner;
/*
当输入若干个数字时,在内存中的调用机制————例:
输入的数字为:1 2 3 4 5 6 0
nextDouble();———下一个为1
1
nextDouble();———下一个为2
2
nextDouble();———下一个为3
3
nextDouble();———下一个为4
4
nextDouble();———下一个为5
5
nextDouble();———下一个为6
6
nextDouble();———下一个为0
0————表示的是循环结束的条件
对于当输入的数字存放在所定义的num中时————int num=nextInt();
nextInt();表示的是存放下一个数字
当用户输入入若干个数字时,这些数字先存放在一个临时存储区,等待被调用
因此对于While循环来说——形如:
System.out.print("Enter an integer,the input ends if it is 0:");
while(true){
double num=input.nextDouble();
if(num==0){
break;
}
}
运行过程如下:
先是num=1; 与0做判断,如果等于0,跳出循环,否则num=2;再判断,以此类推。
*/
class Demo11{
public static void main(String[] args){
Scanner input=new Scanner(System.in);
int pos=0;//存放的是大于0的数
int neg=0;//存放的是小于0得数
double sum=0;//求和
System.out.print("Enter an integer,the input ends if it is 0:");
while(true){
double num=input.nextDouble();
if(num!=0){
sum+=num;
if(num>0){
pos++;
}else{
neg++;
}
}else{
break;
}
}
System.out.println("The number of positives is "+pos);
System.out.println("The number of negatives is "+neg);
System.out.println("The total is "+sum);
System.out.println("The average is "+sum/(pos+neg));
}
}