(一)学习总结
1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?
从键盘输入需要用Scanner类,需要导入头文件 import.java.util.Scanner;
nextInt():读取整形数据
nextDouble():读取双精度数据
next():读取输入的下一个单词
nextLine():读取输入的下一行内容
构造 Scanner 对象,并与 System.in 关联
import java.util.Scanner;
public class Zem{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.println("请输入数据:");
String str = in.next();
System.out.println("输入的数据为:"+str);
}
}
2.Random类和Math类的random()方法都能产生随机数,这两种方式有什么区别,各有什么特点呢?查阅JDK帮助文档,并举例加以说明。
Random类的随机方法是设定随机种子的,如:new Random().nextInt(10),这里的10就是随机种子,根据随机数的原理,相同随机种子在相同的随机次数中产生的随机数是一样的。
Math类返回的是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.本次学习要点中其他需要总结的内容
感觉最基本的知识都还不是太了解,应该加强练习,多看多写。
(二)实验总结
1.看商品猜价格
程序设计思路:
1.首先要先产生一个随机数,作为产品的价格。
2.进入循环,从键盘输入猜的价格,如果猜对了,跳出循环,如果猜错了,提示猜大了还是猜小了,如果猜的次数超过十次,则结束。
问题1:运行进入死循环
原因:没有跳出循环语句
解决方案:加上break
程序:
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);
int lage =0;
int cishu = 0;
int suiji = new Random().nextInt(100);
for(int i=0;i<10;i++){
int price=scan.nextInt();
if(pricesuiji){
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(pricesuiji){
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");
}
}
}
(三)代码托管