(一)学习总结
1:Scanner类实现基本数据输入的方法是什么?
构造Scanner对象,并与System.in连用。
Scanner input=new Scanner(System.in);
调用Scanner的各种方法完成输入操作。
int num=input.nextlnt();
2:区别:
Math类的random()方法可以生成大于等于0.0、小于1.0的double型随机数。
Random类的随机方法是设定随机种子的(如:new Random().nextInt(10))。
特点:
Math类的random():直接调用Random类中的nextDouble方法实现的,比较方便。
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");
}
}
}
为了处理精度损失的问题,可以使用java.math.BigDecimal类,查阅JDK帮助文档或教材p378,对上述程序进行修改。
输出结果是不等于0.3,有误差。
4:第一题的扩展用的到了String类的equal方法不会,所以没有写第一题的扩展。
(二)实验总结
一.猜数游戏
import java.util.Random;
import java.util.Scanner;
public class Guess {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
Random rand=new Random();
System.out.println("只能猜10次哦");
int in=rand.nextInt(100);
int i=0;
for(i=0;i<10;i++){
int num=input.nextInt();
if(num==in){
System.out.println("猜对了");
System.out.println("商品的价格为:"+in);
}
else if(num<in){
System.out.println("猜小了");
}
else{
System.out.println("猜大了");
}
}
System.out.println("商品的价格为:"+in);
}
}
-程序设计思路:用Scanner实现用户的输入,通过与用Random产生的随机数比较,来判断猜测的是否对
-实验问题分析:
问题1:输出的时候明明显示猜对了,却发现输出的值比以前输得数结果显示猜小了了的值还小。
原因:输出的是用户输入的值。
解决方案:改成接收产生随机数那个变量。
二万年历
import java.util.Scanner;
public class year {
public static void main(String[] args) {
System.out.println("请输入年份");
Scanner input=new Scanner(System.in);
int year=input.nextInt();
if(isLeap(year)==true){
System.out.println("是闰年");
}
else{
System.out.println("不是闰年");
}
System.out.println("请输入月份");
Scanner in=new Scanner(System.in);
int month=in.nextInt();
printCalender(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){
int day,g = 0;
boolean a;
a=isLeap(year);
if(a==true){
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
day=31;
}
else if(month==4||month==6||month==9||month==11){
day=30;
}
else{
day=29;
}
}
else{
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
day=31;
}
else if(month==4||month==6||month==9||month==11){
day=30;
}
else{
day=28;
}
}
return day;
}
public static int totaDays(int year,int month){
int sum1=0,sum2=0,sum,g;
for(int i=1900;i<year;i++){
if(isLeap(i)){
sum1+=366;
}
else
{
sum1+=365;
}
}
for(g=1;g<month;g++){
sum2+=days(year,g);
}
sum=sum1+sum2;
return sum;
}
public static void printCalender(int year,int month){
int day,a,b,c,d;
a=days(year,month);
d=totaDays(year,month);
System.out.println("距1900年1月1日天数为:"+d);
System.out.println("这个月天数为:"+a);
c=(1+d%7);
System.out.println("月初是星期:"+c);
System.out.println("星期一 星期二 星期三 星期四 星期五 星期六 星期日");
for(b=1;b<c;b++) {
System.out.printf(" ");
}
for(int i=1;i<=a;i++){
System.out.printf(" %2d ",i);
if((i+c-1)%7==0){
System.out.printf("
");
}
}
}
}
-程序设计思路:用到了闰年的计算方法,还有怎样计算月初是星期几,函数的调用。
-实验问题分析:
问题1:计算到1900年1月1日的天数总是不对,老是多好多天。
原因:public static int totaDays(int year,int month)再用这个函数时,在月数相加时,循环变量从0开始。
解决方案:自己找了好久都没发现,同学帮忙改的。
问题2:月份输出格式不对
原因:换行语句不对。
解决方案:在调用public static int totaDays(year,month)这个函数计算月初是周几时,加了一个1,需要把这个1减去。
三评分
import java.util.Arrays;
public class average {
public static void main(String[] args) {
int score[][]={
{
1,8,9,8,6,7,3,7,6,10
},
{
4,3,7,9,5,9,1,9,8,3
},
{
9,1,3,4,5,6,8,9,7,2
},
{
7,9,6,7,8,1,3,4,10,2
},
{
7,9,2,7,6,7,9,5,10,1
}
};
ave(score);
}
public static int getMax(int score[][]) {
int max=score[0][0];
for(int i=0;i<score.length;i++) {
for(int j=0;j<score[i].length;j++) {
if(score[i][j]>max) {
max=score[i][j];
}
}
}
return max;
}
public static int getMin(int score[][]) {
int min=score[0][0];
for(int i=0;i<score.length;i++) {
for(int j=0;j<score[i].length;j++) {
if(score[i][j]<min) {
min=score[i][j];
}
}
}
return min;
}
public static void ave(int score[][]){
int b,c,sum=0;
double a[];
a=new double[score.length];
b=getMax(score);
c=getMin(score);
double ave;
for(int i=0;i<score.length;i++) {
sum=0;
for(int j=0;j<score[i].length;j++) {
sum+=score[i][j];
}
sum=sum-b-c;
ave=(double)sum/(score[i].length-2);
a[i] =ave;
}
Arrays.sort(a);
for (int i=score.length-1;i>=0;i--) {
System.out.println("第"+(score.length-i)+"位选手的得分为:"+a[i]);
}
}
}
-程序设计思路:用二维数组完成静态赋值,然后在子函数中找到最大值最小值,在计算平均分的时候调用,将平均分放到一维数组中,用Arrays.sort(a)进行排列。
-实验问题分析:
问题1:计算结果不对。
原因:二维数组没有定义大小,求平均分的时候除以的8,。
解决方案:求平均分时应该除以(score[i].length-2)。