Java第一次作业
(一)学习总结
1.Scanner类实现基本数据输入的方法
Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以使用不同的 next 方法将得到的标记转换为不同类型的值
导入import java.util.Scanner;
使用
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
使用户从System.in中导入一个数,根据不同数据类型nextInt()可写成nextfloat()、nextdouble()、nextboolean()
2.Random类
导入import java.util.Random;
Random rand = new Random();
int a=rand.nextInt();
Random 类实现的算法使用一个 protected 实用工具方法,每次调用它最多可提供 32 个伪随机生成的位
Math类
int a=(int)Marh.random()
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");
}
}
}
结果为不等于0.3,因为浮点数类型在运算时,有极小误差
为了处理精度损失的问题,可以使用java.math.BigDecimal类
修改后的程序
import java.math.BigDecimal;
import java.math.MathContext;
public class jisuan {
public static void main(String[] args) {
@SuppressWarnings("unused")
// TODO 自动生成的方法存根
class Test {
public void main(String args[]) {
BigDecimal a = new BigDecimal(0.1);
BigDecimal b = new BigDecimal(0.1);
BigDecimal c = new BigDecimal(0.1);
if(a.add(b).add(c).round(new MathContext(1)).equals(new BigDecimal("0.3"))){
System.out.println("等于0.3");
}else {
System.out.println("不等于0.3");
}
}
}
}
}
(二)实验总结
1.看商品猜价格
import java.util.Random;
import java.util.Scanner;
public class Price {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int a, x,i;
Random rand = new Random();
a = rand.nextInt(100) + 1;
@SuppressWarnings("resource")
Scanner input = new Scanner(System.in);
System.out.println("商品:手表");
System.out.println("输入你猜的价格:");
x = input.nextInt();
for (i = 1;; i++) {
if (x>a) {
System.out.println("高了");
} else if (x<a) {
System.out.println("低了");
} else {
System.out.println("恭喜你,猜对了!一共猜了"+i+"次");
break;
}
if(i>9){
System.out.println("商品的价格为"+a);
break;
}
x = input.nextInt();
}
}
}
设计思路:
使用Random类产生随机数作为商品的价格,通过从键盘上输入数据来表示所猜的价格并与商品原价格做比较若相等跳出循环
2.万年历
package 万年历;
import java.util.Scanner;
public class Date {
public static void main(String[] args) {
// TODO 自动生成的方法存根
System.out.println("请输入年份和月份");
@SuppressWarnings("resource")
Scanner input=new Scanner(System.in);
int year=input.nextInt();
int month=input.nextInt();
print(year,month);
}
public static boolean isLeap(int year){
if(year%4==0&&year%100!=0||year%400==0){
return true;
}else{
return false;
}
}
public static int days(int year,int month){
boolean y=isLeap(year);
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
return 31;
}else if(month==2){
if(y==true){
return 29;
}else{
return 28;
}
}else{
return 30;
}
}
public static int totalDays(int year,int month){
int sum=0,sum1=0,sum2=0;
for(int i=1900;i<year;i++){
boolean x=isLeap(i);
if(x==true){
sum1=sum1+366;
}else{
sum1=sum1+365;
}
}
for(int j=1;j<month;j++){
if(j==1||j==3||j==5||j==7||j==8||j==10||j==12){
sum2=sum2+31;
}else if(j==4||j==6||j==9||j==11){
sum2=sum2+30;
}else{
boolean x=isLeap(year);
if(x==true){
sum2=sum2+29;
}else{
sum2=sum2+28;
}
}
}
sum=sum1+sum2;
return sum;
}
public static void print(int year,int month){
int sum=totalDays(year,month);
int x=sum%7+1;
System.out.printf("%d年%d月\n",year,month);
System.out.printf("星期日 星期一 星期二 星期三 星期四 星期五 星期六\n");
int t=days(year,month);
for(int y=x;y>0;y--){
System.out.printf("\t");
}
for(int i=1;i<=t;i++){
System.out.printf("%d\t",i);
int m=i+x;
if(m%7==0){
System.out.println();
}
}
}
}
设计思路:
输入年和月,先判断是不是闰年,1,3,5,7,8,10,12月是31天,4,6,9,11月是三十天闰年2月29天,平年28天,因为已知1900年1月1日是周一,
所以计算输入年月距1900.1.1的天数再与7求余算出这月1号是周几,判断出此月的天数,将其输出
3.评分系统
package 打分;
import java.util.Scanner;
public class Mark {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int mark[] = null;
mark = new int[10];
int max = 0, min = 0;
double ave[] = null;
ave = new double[5];
for (int i = 0; i < 5; i++) {
System.out.printf("请为第%d个选手打分", i + 1);
for (int j = 0; j < 10; j++) {
@SuppressWarnings("resource")
Scanner input = new Scanner(System.in);
mark[j] = input.nextInt();
}
max = max(mark);
min = min(mark);
mark[max] = mark[min] = 0;
ave[i] = average(mark, 8);
}
System.out.println("五位选手成绩由高到低排序");
print(ave);
}
public static int max(int mark[]) {
int max = mark[0], t = 0;
for (int j = 0; j < 10; j++) {
if (mark[j] > max) {
max = mark[j];
t = j;
}
}
return t;
}
public static int min(int mark[]) {
int min = mark[0], t = 0;
for (int i = 0; i < 10; i++) {
if (mark[i] < min) {
min = mark[i];
t = i;
}
}
return t;
}
public static double average(int mark[], int n) {
double ave = 0;
int sum = 0;
for (int i = 0; i < mark.length; i++) {
sum = sum + mark[i];
}
ave = (double)sum / (double)n;
return ave;
}
public static void print(double ave[]){
for(int i=0;i<ave.length;i++)
for(int j=0;j<ave.length;j++){
if(ave[i]>ave[j]){
double t=ave[i];
ave[i]=ave[j];
ave[j]=t;
}
}
for(int j=0;j<ave.length;j++){
System.out.println(ave[j]);
}
}
}
设计思路:
声明一个一维数组,通过循环五次来输入五个选手的成绩,每输入一个选手的成绩时,同时找出最大最小值,并求出平均值存入另一个数组中,之后按照从大到小排序
(三)代码托管
总结:第一次写Java实验,还不是很熟悉Java的内容,和c语言还是有很多不同的地方的,好多时候是按照c语言的习惯来写的,感觉循环数组和方法的问题不大,但是对各种Java类还不是很熟悉,总体感觉Java比c语言能够实现的功能更多,而且更便捷,更精准。