(一)学习总结
1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?
从键盘输入需要用Scanner类,需要导入头文件 import.java.util.Scanner; nextInt():读取整形数据 nextDouble():读取双精度数据
next{"\\d{4}-\\d{2}-d{2}$"} 在Scanner类中没有专门的日期格式输入操作,需要自己编写验证,手工转换。
next():读取输入的下一个单词 nextLine():读取输入的下一行内容 构造 Scanner 对象,并与 System.in 关联
import java.util.Scanner; public class ScannerDemo01{ public static void main(String[] args){ Scanner sca = new Scanner(System.in); System.out.println("请输入数据:"); String str =sca.next(); System.out.println("输入的数据为:"+str); } } 运行结果为:
2.Random类和Math类的random()方法都能产生随机数,这两种方式有什么区别,各有什么特点呢?查阅JDK帮助文档,并举例加以说明。
Random类的随机方法是设定随机种子的,如:new Random().nextInt(10),这里的10就是随机种子,根据随机数的原理,相同随机种子在相同的随机次数中产生的随机数是一样的。 Math类的radom方法返回的是0~1之间的小数,如果想得到1~100之间的数则需要扩大100倍,但是仍然是小数,可以加(int)强制转换。
import java.util.Random; public class RandomDemo{ public static void main(String args[]){ Random r = new Random(); int x=r.nextInt(100); \\产生0~100的随机整数 System.out.println(); } } import java.util.Random; public class Randoma{ public static void main(String args[]){ double a = Math.random()*100; \\产生1~100的随机小数 int b = (int)(Math.random()*100); \\产生1~100的随机整数 int c = 10+(int)(Math.random()*100); \\产生一个10到10+100之间的整数 System.out.println(a); System.out.println(b); System.out.println(c); } } 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"); } } } 运行结果:
若:
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"); } System.out.println(a+b+c); } } 则运行结果为:
产生误差,所以不相等。
4.本次学习要点中其他需要总结的内容
Math类是数学操作类,提供的一系列数学操作方法,包括求绝对值,三角函数等,在Math类中,提供的一切方法都是静态方法,所以直接由类名称调用,Math类中也有radom方法,只是不大写,返回的是01之间的随机小数,不同于Radom方法。
(二)实验总结
1.看商品猜价格
程序设计思路: 1.首先要先产生一个随机数,作为产品的价格。 2.进入循环,从键盘输入猜的价格,如果猜对了,跳出循环,如果猜错了,提示猜大了还是猜小了,如果猜的次数超过十次,则结束。
问题1:运行进入死循环 原因:没有跳出循环语句 解决方案:加上break
程序:
import java.util.Scanner; import java.util.Random; public class Guesstheprice {
public static void main(String[] args) { // TODO Auto-generated method stub Scanner scan = new Scanner(System.in); int lage =0; int cishu = 0; int suiji = new Random().nextInt(100); for(int i=0;i<10;i++){ int price=scan.nextInt(); if(price<suiji){ System.out.println("您猜小了"); cishu++; } if(price>suiji){ System.out.println("您猜大了"); cishu++; } if(price==suiji){ System.out.println("恭喜您,猜对了"); cishu++; lage++; System.out.println("商品的价格为"+suiji); System.out.println("您一共猜了"+cishu+"次"); break; } } if(lage==0){ System.out.println("您已经猜了十次,商品的价格为"+suiji); } }
} 扩展: 程序设计思路: 1.首先要先产生一个随机数,作为产品的价格。 2.进入循环,输入猜的价格,第一次才对分数为100,两次才对分数为80,以此类推。若五次都没有猜中或者五次之内猜中,则给出价格和分数。 3.一次游戏循环完毕后,则选择是否继续进行下一轮游戏。 问题1:一直卡在 选择是否继续进行下一轮游戏 不会比较字符串
原因:基础知识还不够牢固 解决方案:查阅资料,问同学,解决了这个问题。 程序:
import java.util.Scanner; import java.util.Random; public class Caijiage { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scan = new Scanner(System.in); Scanner str2 = new Scanner(System.in); String str = new String("yes"); String str1 = new String("yes"); int lage =0; int grade = 0; int suiji = new Random().nextInt(100); while (str.equals(str1)){ for(int i=1;i<=5;i++) { int price=scan.nextInt(); if(price<suiji){ System.out.println("您猜小了"); System.out.println("您还有"+(5-i)+"次猜数机会"+"\n"); grade = (5-(i-1))*20; } if(price>suiji){ System.out.println("您猜大了"); System.out.println("您还有"+(5-i)+"次猜数机会"+"\n"); grade = (5-(i-1))*20; } if(price==suiji){ System.out.println("恭喜您,猜对了"); lage++; grade = (5-(i-1))*20; System.out.println("商品的价格为"+suiji); System.out.println("您一共猜了"+i+"次"); System.out.println("您的得分为:"+grade); break; } if(i==5){ System.out.println("您已经猜了五次,商品的价格为"+suiji); System.out.println("您的得分为:0"); } } System.out.println("是否继续游戏?是请输入yes否则输入no"); str1 = str2.next(); } } } 2.万年历
程序设计思路:先判断是闰年还是平年,再计算一共有多少天,判断每个月有多少天,计算出从1900一月一日到今天有多少天,再判断这个月是从周几开始的。 问题1:每个方法在哪使用搞不清楚,还有一个月从周几开始的有点蒙圈。 原因:思路不清晰
代码:
import java.util.Scanner;
public class Wannianli { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("请输入从1900年到现在的一个年份"); Scanner scan = new Scanner(System.in); int year = scan.nextInt(); System.out.println("请输入1-12月的一个月份"); int month = scan.nextInt(); System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六"); 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 day2 = 0; if (month == 2) { if (isLeap(year)) { day2 = 29; } else { day2 = 28; } } else { switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: day2 = 31; break; case 4: case 6: case 9: case 11: day2 = 30;
} } return day2; }
public static int totalDays(int year, int month) { // 计算某年某月之前距离1900年1月1日的总天数 int m, all = 0, day2; for (int i = 1900; i < year; i++) { if (isLeap(year)) { all += 366; } else { all += 356; } } for (m = 1; m < month; m++) { day2 = days(year, month); all = all + day2; } return all; }
public static void printCalender(int year, int month) { // 输出某年某月日历的方法 int j = 0; int s = totalDays(year, month); int n = (s % 7) + 1; for (int i = 1; i <= n; i++) { System.out.println("\t"); j++; } for (int k = 1; k <= days(year, month); k++) { System.out.println(k + "\t"); j++; if (j % 7 == 0) { System.out.println("\n"); } } } (三)代码托管
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位小数
}
}