import java.util.Scanner;
/*
题目的要求是:求一元二次方程的根
第一步确定一元二次方程的表达式:a*x^2+b*x+c=0
第二步确定一元二次方程跟的情况
第三步:判断,判断的条件为——b*b-4*a*c
第四步:如果判断的条件大于0,有两个根
小于0,无实数解
等于0,有两个相同的解
第五步:编写代码
*/
class Demo01{
public static void main(String[] args){
Scanner input=new Scanner(System.in);
System.out.print("Enter a, b, c:");//输入一元二次方程的三个参数
double a=input.nextDouble();
double b=input.nextDouble();
double c=input.nextDouble();
double x,y;//两个未知变量
/*
if-else语句
*/
if((b*b-4*a*c)>0){
x=(-b+Math.pow((b*b-4*a*c),0.5))/2*a;
y=(-b-Math.pow((b*b-4*a*c),0.5))/2*a;
System.out.println("x=" + x + " , " + "y=" + y);
} else if((b*b-4*a*c)==0){
x=(-b+Math.pow((b*b-4*a*c),0.5))/2*a;
y=x;
System.out.println("x=" + x + " , " + "y=" + y);
}else{
System.out.println("无实数解");
}
}
}
运行结果:
PS F:\JavaSE\Day03> javac Demo01.java
PS F:\JavaSE\Day03> java Demo01
Enter a, b, c:4 2 5
无实数解
import java.util.Scanner;
/*
题目要求;知道当天为星期几,再输入多少天之后为星期几
第一步:题目要求0表示的是星期日,1、2、3、4、5、6个表示当天为星期几
第二步:如果今天是0,并且输入的还是7的倍数,那么这些天之后还是0
如果今天是1,则就是1加上做输入的天数再对7取余,那么这些天之后就是取余之后的数
*/
class Demo03{
public static void main(String[] args){
Scanner input=new Scanner(System.in);
System.out.print("Enter today's day:");//输入今天日期的数字
int num1=input.nextInt();
System.out.print("Enter the number of days elapsed since today:");//提示用户输入今天之后的天数
int num2=input.nextInt();
for(int i=0;i<=6;i++){
/*
if条件语句
*/
if(num1==0){
System.out.println("几天之后为:星期"+num2%7);
break;
}
if(num1>=1&&num1<=6){
if(num2>=7){
System.out.println("几天之后为:星期"+num1);
break;
}else if(num2==7-num1){
System.out.println("几天之后为:星期日");
break;
}else{
num2=num2+num1;
if(num2>=7){
System.out.println("几天之后为:星期"+num2%7);
break;
}else{
System.out.println("几天之后为:星期"+num2);
break;
}
}
}
}
}
}
运行结果:
Enter today's day:4
Enter the number of days elapsed since today:56
几天之后为:星期4
import java.util.Scanner;
/*题目要求:输入一个数字,判断该数字是否为回文数
回文数——就是从左往右,再从右往左数值的大小不变
第一步:先输入一个数,随便输入一个数,不管该数为几位数
第二步:首先得确定该数是几位数——while(num!=0){
循环体num/10
count++;记录数值的位数
}
第三步:如何判断该数(123)为回文数----先确定该数的反序数;321
a=num%10 个位=3 ((个位)*10+十位)*10+百位 以此类推
num=num/10
num%10 十位=2
num=num/10
num%10 百位=1
num=num/10
第四步:编写代码
*/
class Demo04{
public static void main(String[] args){
Scanner input=new Scanner(System.in);
System.out.print("Enter a three-digit integer:");
int num=input.nextInt();
int temp1=num,temp2=num;//暂存输入的数
int sum=0;//存放反序数
/*
if((num%10)==(num/100)){
System.out.println(num+" is a palindrome.");
}else{
System.out.println(num+" is not a palindrome.");
}
*/
int count=0;//记录该数的位数
while(num!=0){
num=num/10;
count++;
}
//求输入数的数的反序数
for(int i=1;i<=count;i++){
sum=sum*10+temp1%10;
temp1=temp1/10;
}
//用反序数与输入的数作比较
if(temp2==sum){
System.out.println(temp2+" is a palindrome.");
}else{
System.out.println(temp2+" is not a palindrome.");
}
}
}
运行结果:
Enter a three-digit integer:121
121 is a palindrome.
import java.util.Scanner;
/*
题目要求:采拳游戏
石头 0 剪刀 1 布 2
系统产生的随机数——————调用数学函数Math.random();该函数产生的是0到1.0的随机数,而且默认的是double型
因此必须得强制进行数据类型的转化
第一步:确定用户赢的可能————用户赢
用户0 系统1
用户1 系统2
用户2 系统0
第二步:如果用户与系统相同——————平手
第三步:其余系统赢
第四步:编写代码
*/
class Demo06{
public static void main(String[] args){
Scanner input=new Scanner(System.in);
System.out.print("scissor(0) ,rock(1) ,paper(2):");
int num1=input.nextInt();
int num2=(int)(Math.random()*3);//系统所产生的随机数
if(num1==num2){
System.out.println("平手");
}else if(num1<num2){
System.out.println("你赢了");
}else if(num1==2&&num2==0){
System.out.println("你赢了");
}else{
System.out.println("你输了");
}
}
}
运行结果:
scissor(0) ,rock(1) ,paper(2):2
你赢了
、
import java.util.Scanner;
/*
题目要求:求两点之间的距离
第一步:明确两点之间的距离公式————Math.pow((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2),0.5);
第二步;确定条件——如果两点之间的距离大于半径,即在圆外,反之,在圆内。
第三步:写代码
*/
class Demo08{
public static void main(String[] args){
Scanner input=new Scanner(System.in);
System.out.print("Enter a point with two coordinates:");//输入一个坐标点
double x=input.nextDouble();
double y=input.nextDouble();
if(Math.pow((x*x+y*y),0.5)<=9){//判断条件
System.out.println("Point (" + x + "," + y + ") is in the circle.");
}else{
System.out.println("Point (" + x + "," + y + ") is not in the circle.");
}
}
}
运行结果:
Enter a point with two coordinates:2 5
Point (2.0,5.0) is in the circle.
import java.util.Scanner;
/*
题目要求:根据输入的行数,进而打印如下图形:先打印五行——
空格数:1 2 3 4
1 1
2 1 2 2
3 2 1 2 3 3
4 3 2 1 2 3 4 4
5 4 3 2 1 2 3 4 5 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
3 2 1 2 2
5 3 2 1 2 3 3
7 4 3 2 1 2 3 4 4
9 5 4 3 2 1 2 3 4 5 5
-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
并且每一行所对应的数值为坐标的绝对值加一------因此代码可写为:
for(int m=1-i;m<=i-1;m++){
System.out.print(Math.abs(m)+1);
}
[注:再下来就是格式的要求——由于每一行所打印的数值所占的大小为两个空格大小,因此就有输出的格式要求——————代码就可改为:
System.out.printf("%2d",Math.abs(m)+1);
]
切记:每一行打印完之后必须换行——System.out.println();
最后如果改成输入多少行就打印多少行,则只需改代码中的数字五变成一个变量。
*/
class Demo14{
public static void main(String[] args){
Scanner input=new Scanner(System.in);
System.out.print("Enter the number of lines:");
int num=input.nextInt();
for(int i=1;i<=num;i++){
for(int j=1;j<=num-i;j++){
System.out.print(" ");
}
for(int k=1-i;k<=i-1;k++){
System.out.printf("%2d",(Math.abs(k)+1));
}
System.out.println();
}
}
}
运行结果:
Enter the number of lines:5
1
2 1 2
3 2 1 2 3
4 3 2 1 2 3 4
5 4 3 2 1 2 3 4 5
/*
题目要求:总共打印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();
}
}
}
运行结果:
1
1 2 1
1 2 4 2 1
1 2 4 8 4 2 1
1 2 4 8 16 8 4 2 1
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));
}
}
未完待续············