Java 第一次作业

时间:2023-03-09 19:24:31
Java 第一次作业

(一)学习总结

1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?不能只用文字描述,一定要写代码,通过具体实例加以说明。

import java.util.Scanner;
public class ScannerDemo1 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("输入数据:");
String str = scan.next();
System.out.println("输入的数据为:"+str);
}

}

Scanner 的头文件为import java.util.Scannner,之后再用Scanner声明,就可以调用了。最简单的数据输入直接使用Scanner类的next()方法。

2.Random类和Math类的random()方法都能产生随机数,这两种方式有什么区别,各有什么特点呢?查阅JDK帮助文档,并举例加以说明。

Math类的random()函数返回的值大于等于0.0小于1.0,

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中浮点数的计算会出现精度丢失的问题

改正之后

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<1e-6)
{
System.out.println("等于0.3");
}else {
System.out.println("不等于0.3");
}
}

}

(二)实验总结

1.看商品猜价格

利用Random产生随机数,用for循环控制一共可以猜的次数,循环内竞猜价格与随机数进行比较大小,进行输出。

package test;
import java.util.Scanner;
import java.util.Random;
public class yi { public static void main(String[] args) {
// TODO Auto-generated method stub
Random rand = new Random();
int price_unkown;
int max = 100;
int min = 1;
int i,a,flag=0;
a=rand.nextInt(100);
System.out.println("商品价格"); for(i=1;i<=10;i++){
System.out.print("输入竞猜的价格");
Scanner in = new Scanner(System.in);
price_unkown = in.nextInt();
flag++;
if(price_unkown == a){
System.out.println("猜对了");
System.out.println("猜测的次数"+flag);
System.out.println("商品价格"+a);
break;
}
else if(price_unkown < a){
System.out.println("猜小了");
}
else if(price_unkown > a){
System.out.println("猜大了");
} }System.out.println("商品价格为"+a);
} }

2.万年历

package test;
import java.util.Scanner;
public class yi {
static boolean isleap(int year){ //判断闰年
if(year%400==0 || (year%4==0 && year%100!=0)){ //是闰年
return true;
} else{
return false;
}
}
static final int N = 1900; //用N表示起始年份 public static void main(String[] args) {
// TODO Auto-generated method stub
int n = 1;//1900年1月1日 是星期一
int month[] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //用来存储月份的天数
int year[] = new int[1001]; //用来存储每年1月1日是星期几
year[0] = n;
for(int i=1;i<year.length;i++){
int days = 365;
if(isleap(i+N-1)){//如果它的前一年是闰年则需要加366
days = 366;
year[i] = (year[i-1] + days)%7;
}
else{
year[i] = (year[i-1] + days)%7;
}
}
int Month ,Year;
Scanner in = new Scanner(System.in);
System.out.println("请输入年份在(1900~2900之间):");
Year = in.nextInt();
if(Year>2900 || Year<1900){
System.out.println("输入年份不合法,请重新输入!");
return;
}
//System.out.println(year[Year-1970]);
System.out.println("请输入月份(1~12之间):");
Month = in.nextInt();
if(Month>12 || Month<1){
System.out.println("输入月份不合法,请重新输入!");
return;
}
System.out.println("星期日" +"星期一 "+"星期二"+"星期三"+"星期四"+"星期五"+"星期六");
System.out.println();
if(isleap(Year)){ //如果是闰年,2月改为29号
month[2] = 29;
}
int day=0; //用来记录当前月的一号是今年的第几天
for(int i=1;i<Month;i++){
day = day + month[i];
} day = (year[Year-N]+day)%7;
for(int i=0;i<7;i++){//输出控制
if(day == i){
System.out.print(" " + 1 + " ");
if(day == 6){
System.out.println();
}
break;
}
else{
System.out.print(" ");
}
}
for(int i=2;i<=month[Month];i++){
if(i<10){
System.out.print(" " + i + " ");
}
else{
System.out.print(" " + i + " ");
}
if((day+i-1)%7 == 6){
System.out.println();
}
}
}
}

3.评分系统

package ww;
import java.util.Scanner;
public class w { private static int grades[]; public static void main(String[] args) {
grades = new int [5];
for(int x=0;x<5;x++) {
double[] scores = new double[10];
Scanner input = new Scanner(System.in);//扫描器用于读取控制台输入
for (int i = 0; i < scores.length; i++) {//输入分数
System.out.print("请输入第" + (i + 1) + "位评委的分数,满分十10分");
String temp = input.nextLine().trim();
scores[i] = Double.parseDouble(temp);
}
getScore(scores);//对分数进行处理的函数
}
} private static void getScore(double[] scores) {
//对分数进行排序
double temp;
for (int i = 0; i < scores.length - 1; i++) {
for (int j = i + 1; j < scores.length; j++) {
if (scores[i] > scores[j]) {
temp = scores[i];
scores[i] = scores[j];
scores[j] = temp;
}
}
}
//去掉一个高分,一个低分后的平均分
double sum =0;
for (int i = 1; i < scores.length-1; i++) {
sum+=scores[i];
}
double pjf = sum/(scores.length-2);
System.out.println("去掉一个最高分:"+scores[scores.length-1]);
System.out.println("去掉一个最低分:"+scores[0]);
System.out.println("最后的平均分是:"+String.format("%.2f",pjf));//平均分保留2位小数
}
}