第二次JAVA作业
题目一斐波那契数列
1.题目:
Fibonacci数列定义为:F1=F2=1,Fn=Fn-1+Fn-2(n≥3)。请给出一个程序,实现输入一个大于等于3的整数N,返回其对应的Fibonacci数值。
2.思考
①在数组这里遇到了一些问题,一开始我的代码是System.out.println(“您需要输出的第”+inputnum+“项斐波那契数列的值为”+s[i]);也就是说一开始我的输出数组的序号是i,但是这样最后打印的结果为0,由于数组从零开始,而数列是从1开始,所以我又改成是s[inputnum-1],但还是显示为0,最后我猜测会不会是数组的下标不允许是代数式,于是我在这句话前面定义了一个新变量a,令a=inputnum-1,最后输出s[a],成功了
②这次我终于成功了我的dowhile循环,一开始我的while循环中的条件是while(inuebutton==“y” ),但是这样系统并没有继续循环下去,但是我也不知道原因是什么;然后改了一下将while中间的条件改成while(continuebutton.equals(continueletter)),用到了equals()方法来比较两个字符串是否相同,然后返回值是布尔类型,成功进行了我的循环
代码参考
package Fibonacci1;
import java.util.Scanner;
public class calculation {
public static void main(String[] args)
{Scanner scan = new Scanner(System.in);
String continuebutton = "";//输入的决定是否要继续的符号
String continueletter ="y";
do{
System.out.println("请输入你需要的斐波那契数列的小于3的正整项数N");
int inputnum=scan.nextInt();
if(inputnum<3)
System.out.println("请输入小于3的正整数!");
else
{
int size = 100;
int [] s=new int [size];//我定义了一个长度为100的数组
s[0]=1;
s[1]=1;
int i=2;
for(;i<=inputnum;i++)
{
s[i]=s[i-1]+s[i-2];
}
int a=inputnum-1;
System.out.println("您需要输出的第"+inputnum+"项斐波那契数列的值为"+s[a]);
//在这里遇到了一些问题,一开始我的代码是System.out.println("您需要输出的第"+inputnum+"项斐波那契数列的值为"+s[i]);
//也就是说一开始我的输出数组的序号是i,但是这样最后打印的结果为0,由于数组从零开始,而数列是从1开始,所以我又改成是s[inputnum-1],但还是显示为0,最后我猜测会不会是数组的下标不允许是代数式,于是我在这句话前面定义了一个新变量a,令a=inputnum-1,最后输出s[a],成功了
System.out.println("感谢您的使用");
}
System.out.println("是否继续,继续y,任意键退出");
continuebutton=scan.next();
}while(continuebutton.equals(continueletter));// 这次我终于成功了我的dowhile循环,一开始我的while循环中的条件是while(inuebutton==“y” ),但是这样系统并没有继续循环下去,但是我也不知道原因是什么;然后改了一下将while中间的条件改成while(continuebutton.equals(continueletter)),用到了equals()方法来比较两个字符串是否相同,然后返回值是布尔类型,成功进行了我的循环
}
}
题目二在圆上随机获得圆内三角形的三个内角
**
代码参考
**
package sanjioarandom;
public class calculation {
public static void main(String []args)
{
System.out.println("欢迎来到胡竞文的程序(作业三第二题)");
int r=40;
double a1=Math.toRadians(360*Math.random());//toRadians方法将角度转换为弧度
double a2=Math.toRadians(360.0*Math.random());
double a3=Math.toRadians(360.0*Math.random());
double x1=(float)(r*Math.cos(a1));
double y1=(float)(r*Math.sin(a1));
double x2=(float)(r*Math.cos(a2));
double y2=(float)(r*Math.sin(a2));
double x3=(float)(r*Math.cos(a3));
double y3=(float)(r*Math.sin(a3));
System.out.println("随机获得的第一个坐标分别是"+"("+x1+","+y1+")");
System.out.println("随机获得的第二个坐标分别是"+"("+x2+","+y2+")");
System.out.println("随机获得的第三个坐标分别是"+"("+x1+","+y3+")");
double s1=Math.sqrt(Math.pow(x1-x2, 2)+Math.pow(y1-y2, 2));
double s2=Math.sqrt(Math.pow(x1-x3, 2)+Math.pow(y1-y3, 2));
double s3=Math.sqrt(Math.pow(x3-x2, 2)+Math.pow(y3-y2, 2));
System.out.println("随机获得的三条边分别是"+s1+","+s2+","+s3);
double A=(float)(Math.toDegrees(Math.acos((s2*s2+s3*s3-s1*s1)/(2*s2*s3))));
double B=(float)(Math.toDegrees(Math.acos((s1*s1+s3*s3-s2*s2)/(2*s1*s3))));
double C=(float)(Math.toDegrees(Math.acos((s2*s2+s1*s1-s3*s3)/(2*s2*s1))));
System.out.print("\n三个角的度数为:\n");
System.out.printf("A:%.2f B:%.2f C:%.2f",A,B,C);
}
}
个人认为这个题目的关键在于通过对于输出的效果来感受不同数值类型的特点,思路比较简单。实验中我用到了toRadians方法将角度转换为弧度。