《Java技术》第一次作业
(一)学习总结
1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?不能只用文字描述,一定要写代码,通过具体实例加以说明。
(1)使用Scanner必须在开头加入import java.util.Scanner;Scanner in = new Scanner(System.in);字符串类型遇到空格或者回车就结束输入,需要用到nextline()
import java.util.Scanner;
public class Scan {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in); // 从键盘接收数据
System.out.println("输入数据:");
String str = scan.next();
System.out.println("输入的数据为:" + str);
Scanner sc = new Scanner(System.in);
System.out.println("输入数据:");
String s = sc.nextLine();
System.out.println("输入的数据为:" + s);
}
}
输出结果
(2)在Scanner中使用int型,float型等,可以用固定格式Scanner in = new Scanner(System.in);int a = in.nextInt();float b = in.nextFloat();等等
import java.util.Scanner;
public class Scan {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("输入数据:");
int a = in.nextInt();
System.out.println("int 输出数据"+a);
System.out.print("输入数据:");
float b = in.nextFloat();
System.out.println("float 输出数据"+b);
System.out.print("输入数据:");
double c = in.nextDouble();
System.out.println("double 输出数据"+c);
}
}
输出结果:
2.Random类和Math类的random()方法都能产生随机数,这两种方式有什么区别,各有什么特点呢?查阅JDK帮助文档,并举例加以说明。
(1)Math类的random()方法,方法生成的是一个double类型的范围在[0,1)的数字,不包括1,要想变成int型,需要进行转化;要想产生在(0~100),必须在其后面乘以相应的数字,则得到的就是 [0,100)之间随机double类型数字
public class Pu{
public static void main(String args[]){
double a=(int)(Math.random());
int b=(int)(Math.random()*100);
System.out.println("输入数据"+a);
System.out.println("输出数据"+a);
System.out.println("输入数据"+b);
System.out.println("输出数据"+b);
}
}
结果:
(2)开头必须有“import java.util.Random”,且Random类产生的随机数,.nextFloat(),.nextInt()等等,在括号里面输入多少,就产生多大范围的值
import java.util.Random;
public class Pu{
public static void main(String args[]){
Random sa=new Random();
int a;int b;
a=sa.nextInt(100);
b=sa.nextInt(50);
int sum=a+b;
System.out.println("输入数据:"+a+"输入数据:"+b);
System.out.println("输出数据:"+sum);
}
}
结果:
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中简单类型不能够精确的对浮点数进行运算,需要用BigDecimal类
正确代码
import java.math.BigDecimal;
public class Test {
public static void main(String args[]) {
BigDecimal a = new BigDecimal(0.1);
BigDecimal b = new BigDecimal(0.1);
BigDecimal c = new BigDecimal(0.1);
BigDecimal d = new BigDecimal(1);//任何一个数字都是除以1都是原数字
System.out.println(a.add(b).add(c));
//ROUND_HALF_UP是BigDecimal的一个常量,表示进行四舍五入
if(a.add(b).add(c).divide(d,2,BigDecimal.ROUND_HALF_UP).doubleValue()==0.3){
System.out.println("等于0.3");
}else {
System.out.println("不等于0.3");
}
}
}
结果
为了处理精度损失的问题,可以使用java.math.BigDecimal类,查阅JDK帮助文档或教材p378,对上述程序进行修改。
4.本次学习要点中其他需要总结的内容:因人而异,根据自己的学习情况,记录难掌握或难理解的内容,以及学有心得的内容。还存在哪些问题,也可以提出来,对于同学在博客中提出的问题,大家可以积极讨论,互帮互学。
答:(1)关于精度问题不能灵活运用
(2)对于java与C语言的不同,有点转化不过来
(3)平常需要多写写代码,才能灵活运用java来编写程序,而不是将C语言与java混合在一起
(二)实验总结
实验内容:
1.看商品猜价格
(1)代码
import java.util.Scanner;
import java.util.Random;
public class Price {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Random rand = new Random();
int num = rand.nextInt(100);
System.out.println(num);
int n = 0;
for (int i = 1; i <= 10; i++) {
int price = scan.nextInt();
if (num == price) {
System.out.println("输出结果:" + num);
} else if (num < price) {
System.out.println(" too big");
} else {
System.out.println(" too small");
}
n++;
System.out.println("次数" + n);
}
}
}
(2)结果
(3)思路
猜大还是猜小,必须先产生一个随机数,用Random类来产生随机数,用Scanner类来进行输入数,然后将自己猜想的价格与随机产生的值进行比较,若自己猜出的值比随机产生的值小,则说太小了,若自己猜出的值比随机产生的值大,则说太大了,且一共有10次机会,若10次都没有才对则直接输出结果。
(4)问题 再输出猜了多少次时,不知道该写到哪里
解决方案 经过了多次尝试,才找到如何很好的输出自己比较了多少次
2.万年历
(1)代码
import java.util.Scanner;
public class Calender {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.println("年份");
int year = sc.nextInt();
System.out.println("月份");
int month = sc.nextInt();
printCalender(year, month);
}
public static boolean isLeap(int year) {
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
return true;
} else {
return false;
}
}
public static int days(int year, int month) {
int day = 0;
switch (month) {
case 1:
day = 31;
case 2:
if (isLeap(year)) {
day = 29;
} else {
day = 28;
}
case 3:
day = 31;
case 4:
day = 30;
case 5:
day = 31;
case 6:
day = 30;
case 7:
day = 31;
case 8:
day = 31;
case 9:
day = 30;
case 10:
day = 31;
case 11:
day = 30;
case 12:
day = 31;
}
return day;
}
public static int totalDays(int year, int month) {
int sum = 0;
for (int i = 1990; i < year; i++) {
if (isLeap(year)) {
sum += 366;
} else {
sum += 365;
}
}
for (int i = 1; i < month; i++) {
sum = sum + days(year, i);
}
return sum;
}
public static void printCalender(int year, int month) {
int weekday = (totalDays(year, month) + 1) % 7;
System.out.println("Sun\tMon\tTue\tWed\tThu\tFri\tSut\n");
for (int i = 1; i <= weekday; i++) {
System.out.print("\t");
}
for (int x = 1; x <= days(year, month); x++) {
System.out.print(x + "\t");
if ((x + weekday) % 7 == 0) {
System.out.println();
}
}
}
}
(2)结果
(3)思路
先判断是否为闰年,若是闰年,二月有29天,其他月份天数相同,一年有366天;否则,二月有28天,其他月份天数相同,一年有365天;将输入的年份和月份,计算出总天数加1,除7求余,可求出星期;根据(x + weekday) % 7 == 0可以求出每天对应的日期
(4)问题 不能够打印出正确的万年历,并且输出的日历格式不正确
原因 代码写的不正确,没有利用(x + weekday) % 7 == 0,而是直接写成了weekday % 7 == 0,导致结果出错
解决发案 从网上查找,和同学相互讨论
3.评分系统
(1)代码
import java.util.Scanner;
import java.util.Arrays;
public class Score {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int k[][] = new int[5][10];
System.out.println("请第评委给选手打分");
for (int i = 0; i < 5; i++)
for (int j = 0; j < 10; j++) {
k[i][j] = in.nextInt();
}
double[] score = new double[5];
score = average(k);
Arrays.sort(score);
System.out.println("选手的排名情况为");
for (int i = 4; i >= 0; i--) {
System.out.println(score[i]);
}
}
public static int Max(int k[][]) {
int a = 0;
int max = k[a][1];
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 10; j++) {
if (k[i][j] > max)
max = k[i][j];
}
}
return max;
}
public static int Min(int k[][]) {
int a = 0;
int min = k[a][1];
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 10; j++) {
if (k[i][j] < min)
min = k[i][j];
}
}
return min;
}
public static double[] average(int k[][]) {
double[] score = new double[5];
double[] average = new double[5];
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 10; j++) {
score[i] += k[i][j];
}
}
for (int i = 0; i < 5; i++) {
score[i] = score[i] - Max(k);
score[i] = score[i] - Min(k);
average[i] = score[i] / 8;
}
return average;
}
}
(2)结果
(3)思路
先写出5位选手得分情况,用二维数组来做,从十个分数中选出最大值和最小值,将总得分减去最大值和最小值,然后除以8,得出平均值,然后按照从高到低排列
(4)
问题 没有定义Arrays,程序一直显示出错,在总成绩案从高到低排列时弄成了从低到高排列;
解决方案 从网上搜索,询问同学
(三)代码托管
码云提交历史截图
《Java技术》第一次作业的更多相关文章
- Java技术 第一次作业
(一)学习总结 1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么? 代码开头加一句 Import java.util; 构建Sca ...
- 2017《java技术预备作业》
2017<java技术预备作业> 1.阅读邹欣老师的博客,谈谈你期望的师生关系是什么样的? 亦师亦友,很多人这样说,确实,倘若师生之间如果中间有些隔阂最终吃亏的始终是学生.我认为师生之间应 ...
- 2017《JAVA技术预备作业》 1502 陈明宇
1.阅读邹欣老师的博客,谈谈你期望的师生关系是什么样的? 我期望的师生关系应该是亦师亦友的关系,美丽的校园是我们学生居住生活最久的地方而老师则是和我们接触最为密切的人.在课堂上,老师是辛勤的园丁,向我 ...
- 2017<java技术>预备作业计科冀浩然
1.阅读邹欣老师的博客,谈谈你期望的师生关系是什么样的? 我期望的师生关系是相互融洽的,老师能够在上课的时候尽量多的教我们专业知识,可以尽量多和我们进行互动,课下能和我们如同朋友一般就可以了. 2.你 ...
- Java程序设计第一次作业
虽说这学期Java比上学期的C语言要简单些许,但是初次面对java程序,还是有点难度的.
- JAVA的第一次作业
读后感:这个学期开始接触一门新的学科就是JAVA,老师对这么学科介绍了很多,我也从中了解到了许多,它可能是相对于C语言而已可能要更加方便一些,也是现在世界上所用最多的语音(软件方面),C语言都是排在它 ...
- Java程序第一次作业
public class yjj { public static void main(String[] args) { System.out.println("Hello Java" ...
- java 程序设计第一次作业
public class Join{ public static void main(String args[]){ String s1=new String("hello"); ...
- Java第一次作业——Java语言基础
<Java技术>第一次作业 学习总结 1.Scanner类实现基本数据输入方法 Scanner input=new Scanner(System.in); int num = input. ...
- java第一次作业0
lsl321 java第一次作业 #1. 本章学习总结 你对于本章知识的学习总结 本章我们学习了各种java相关文件的使用,以及码云,博客,pat等程序辅助软件,这些对于我们专业的学习有非常大的帮助, ...
随机推荐
- css的内容
块级元素和行内元素的区别: 1. 行内元素部不能够设置宽度和高度.行内元素的宽度和高度是标签内容的宽度和高度.块级元素可以设置宽度和高度. 2. 块级元素会独占一行.而行内元素却部能够独占一行,只能和 ...
- 根据HTML5的新方法 drag & drop 方法实现表格拖拽实例
上一次学习了html5的drag和drop方法,传送门 就自己写了个例子加深自己对drag和drop的理解.不过一开始不是很简单,遇到了不少问题.还好网络万能的,什么都能查到,总算完成了. 说明和详 ...
- Ajax 的onreadystatechange事件注意事项.
<script type="text/javascript"> function createXHR() { var request = false; try { re ...
- hadoop2.6.0实践:引入开发依赖的jar包
hadoop-2.5.0\share\hadoop\common 所有jar,hadoop-2.5.0\share\hadoop\common\lib 所有jar,hadoop-2.5.0\sha ...
- 新概念英语(1-125)Tea for two
Does Susan have tea by herself?A:Can't you come in and have tea now,Peter? Not yet.B:I must water th ...
- Let's Encrypt,免费好用的 HTTPS 证书
很早之前我就在关注 Let's Encrypt 这个免费.自动化.开放的证书签发服务.它由 ISRG(Internet Security Research Group,互联网安全研究小组)提供服务,而 ...
- Python操作SQLAchemy
如果对代码不懂就看这个:http://www.cnblogs.com/jixuege-1/p/6272888.html 本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql O ...
- 框架学习之Spring(一IOC)----HelloWrod
一.概述 Spring是一个开源框架,它的核心是控制反转(IOC)和面向切面(AOP).简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架. EE 开发分 ...
- POJ-3295 Tautology---栈+表达式求值
题目链接: https://vjudge.net/problem/POJ-3295 题目大意: 输入由p.q.r.s.t.K.A.N.C.E共10个字母组成的逻辑表达式WFF 其中 ...
- python三元操作符
#比较大小更简单了 x,y=3987,24361 small=(x if x<y else y) print(small) #方法一:比较三个数的大小找出较大的一个 x,y,z=8,1,13 ...