作业一
一(学习总结)
1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?不能只用文字描述,一定要写代码,通过具体实例加以说明。
输入需要三个步骤:
import java.util.Scanner;//输入
Scanner num=new Scanner(System.in);//输入
int k=num.nextInt();//输入
2.Random类和Math类的random()方法都能产生随机数,这两种方式有什么区别,各有什么特点呢?查阅JDK帮助文档,并举例加以说明。
Math.random()返回的只是从0到1之间的小数,如果要50到100,就先放大50倍,即0到50之间,这里还是小数,如果要整数,就强制转换int,然后再加上50即为50~100.
最终代码:(int)(Math.random()*50) + 50
Random类产生的随机数,在其最大值范围内,按照概率均匀分布的。也就是说,两个种子数相同的Random对象,第一次生成的随机数字完全相同,第二次生成的随机数字也完全相同。
举例:
3.3.运行下列程序,结果是什么?查阅资料,分析为什么。
public class Test {
public static void main(String args[]) {
double a = 0.1;
double b = 0.1;
double c = 0.1;
if((a + b + c) == 0.3){
System.out.println("等于0.3");
}else {
System.out.println("不等于0.3");
}
}
}
结果是:不等于
修改后:
需要精确计算结果,要用BigDecimal类
(二)实验总结
实验内容:
1.看商品猜价格
2.万年历
3.评分系统
1:
package lianxi;
import java.util.*;
import java.util.Random;
public class Caijiage {
public static void main(String args[]) {
Random jiage = new Random();
Scanner cai = new Scanner(System.in);
int caijiage, shijijiage, i, defen,zongfen=0,i1=0;
String Str, Str1;
Str1 = "Y";
shijijiage = jiage.nextInt(101);
do {
i = 0;
System.out.println("欢迎来到你猜 你猜 你猜猜猜 环节,请输入商品价格,你有五次机会,猜中了,奖品就是你的,价格区间0-100。");
do {
caijiage = cai.nextInt();
if (caijiage < 0 || caijiage > 100) {
System.out.println("超出范围了");
i++;
}
if (caijiage == shijijiage) {
System.out.println("不错,猜对了");
System.out.println("得分为" + (5 - i) * 20 + "商品价格为" + shijijiage);
zongfen=zongfen+((5 - i) * 20);
i++;
break;
} else if (caijiage < shijijiage) {
System.out.println("这次不行,猜低了");
i++;
System.out.println("你还有" + (5 - i) + "次机会");
} else if (caijiage > shijijiage) {
System.out.println("这次不行,猜高了");
i++;
System.out.println("你还有" + (5 - i) + "次机会");
}
} while (i < 5);
if (i == 5 && caijiage != shijijiage) {
defen = 0;
System.out.println("\n你都没猜对,商品价格为" + shijijiage);
System.out.println("得分为" + defen);
}
System.out.println("是否继续?Y/N?");
Str = cai.next();
i1=i1+i;
} while (Str.equals(Str1));
System.out.println("\n你总共猜了"+i1+"次,你总共得了"+zongfen+"分");
}
}
设计思路:需要产生随机数的同时需要用户键盘输入,两者进行比较大小,同时,要分清楚次数与分数之间的函数关系,所猜次数利用循环进行限制。
2:
package lianxi;
import java.util.*;
public class Rili {
public static void main(String args[]) {
int i, i1, month, sum;
Scanner year = new Scanner(System.in);
System.out.println("输入年月");
i = year.nextInt();
i1 = year.nextInt();
if (isleap(i)) {
System.out.println(i + "年不是闰年");
} else {
System.out.println(i + "年是闰年");
}
month = days(i, i1);
System.out.println(i + "年" + i1 + "月有" + month + "天");
sum = totaldays(i, i1);
System.out.println("总天数为" + sum);
System.out.println(i + "年" + i1 + "月日历为:");
print(i, i1);
}
public static boolean isleap(int year) {//判断闰年
boolean flag = true;
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
flag = false;
}
return flag;
}
public static int days(int year, int month) {//月份天数
int a, b, i;
isleap(year);
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
b = 31;
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
b = 30;
} else {
if (isleap(year)) {
b = 28;
} else {
b = 29;
}
}
return b;
}
public static int totaldays(int year, int month) {//总天数
int i, j, day = 0;
for (i = 1900; i < year; i++) {
for (j = 1; j <= 12; j++) {
day = day + days(i, j);
}
}
for (i = year; i < year + 1; i++) {
for (j = 1; j < month; j++) {
day = day + days(i, j);
}
}
return day;
}
public static void print(int year, int month) {//遍历
int i, b, x1 = 0, c;
b = 1 + totaldays(year, month) % 7;
c = days(year, month);
System.out.printf("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\n");
if (b != 7) {
for (i = 0; i < b; i++) {
System.out.printf("\t");
x1++;
}
}
for (i = 1; i <= c; i++) {
System.out.printf(" %-2d\t", i);
x1++;
if (x1 != 0 && x1 % 7 == 0) {
System.out.println("");
}
}
}
}
设计思路:分清闰年的判定条件,算出所求年份到1900年之间有几个闰年有几个平年,进行天数相加,再加上截止到本年某月份的天数,为总天数,之后进行日历输出。
3:
老师,手动输入50个数太累了。。我这个是25个分数。
package lianxi;
import java.util.Arrays;
import java.util.Scanner;
public class Dafen {
public static void main(String args[]) {
int i, j, data[][] = new int[5][5],max[]=new int[5],min[]=new int[5];
double ave[]=new double[5];
System.out.println("输入5位选手的成绩");
Scanner fenshu = new Scanner(System.in);
for (i = 0; i < 5; i++) {
for (j = 0; j < 5; j++) {
data[i][j] = fenshu.nextInt();
}
}
for(i=0;i<5;i++) {
Arrays.sort(data[i]); // 排序
}
/for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++) {
System.out.println(data[i][j]);
}
}/
System.out.print("最高分分别为");
for(i=0;i<5;i++) {
max[i]=max(data[i]);
System.out.print(max[i]+" ");
}
System.out.print("\n");
System.out.print("最低分分别为");
for(i=0;i<5;i++) {
min[i]=min(data[i]);
System.out.print(min[i]+" ");
}
System.out.print("\n");
System.out.print("平均分分别为");
for(i=0;i<5;i++) {
ave[i]=ave(data[i]);
System.out.print(ave[i]+" ");
}
System.out.print("\n");
Arrays.sort(ave); // 排序
System.out.print("排序后平均分为:");
for(i=4;i>=0;i--) {
System.out.print(ave[i]+" ");
}
}
public static int max(int arr[]){
return arr[4];
}
public static int min(int arr[]){
return arr[0];
}
public static double ave(int arr[]) {
int i;
double sum=0;
double ave=0;
for(i=1;i<4;i++) {
sum=arr[i]+sum;
ave=(double)sum/3;
}
return ave;
}
}
设计思路:
将分数存到数组,用函数进行排序,去除最大值和最小值,将数组剩下的分数进行求和,求平均数,然后存放到新数组,将新数组排序输出。
(三)代码托管