《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等程序辅助软件,这些对于我们专业的学习有非常大的帮助, ...
随机推荐
- python之路--day6--字符编码
一.知识储备 cpu--控制和运算 内存--暂时存储cpu需要的数据 硬盘--永久保存数据2.文本编辑器的原理存储原理 1,启动文本编辑器 2,在编辑器上输入内容---此时输入内容还在内存上 3,保存 ...
- Hadoop完全分布式安装教程
一.软件版本 Hadoop版本号:hadoop-2.6.0.tar: VMWare版本号:VMware-workstation-full-11.0.0-2305329 Ubuntu版本号:ubuntu ...
- Python内置函数(1)——abs
英文文档: abs(x) Return the absolute value of a number. The argument may be an integer or a floating poi ...
- 搭建ssm框架,可实现登录和数据展示以及增删改查
需求: 后台使用ssm(spring-springMVC-mybatis)进行整合 前台使用bootstrap框架 前后台交互使用Ajax进行发送 表结构: 登录页面后显示所有用户信息,可对每条进行增 ...
- 访问器属性:setter()函数和getter()函数
1.干嘛用的? getter()函数:返回有效的值 setter()函数:调用它并传入数据,这个函数决定如何处理数据 2.具备哪些属性?如何定义? configurable(默认为true),enum ...
- Spark:将RDD[List[String,List[Person]]]中的List[Person]通过spark api保存为hdfs文件时一直出现not serializable task,没办法找到"spark自定义Kryo序列化输入输出API"
声明:本文转自<在Spark中自定义Kryo序列化输入输出API> 在Spark中内置支持两种系列化格式:(1).Java serialization:(2).Kryo seriali ...
- 谈谈spring-boot不同包结构下,同样的类名冲突导致服务启动失败解决方案
项目背景: 某日,有需求要在三天的时间内完成两个大项目的项目合并,因为之前两个项目的包结构和类名都很多相同,于是开始考虑使用加一级包进行隔离,类似于这种结构 但是在启动的过程中,抛出来这样的异常: C ...
- 深度学习中Xavier初始化
"Xavier"初始化方法是一种很有效的神经网络初始化方法,方法来源于2010年的一篇论文<Understanding the difficulty of training ...
- Glide v4版本用法探究.md
一基本介绍 本博客是基于Glide4.0+进行探究和学习 使用配置 用法比对 二使用配置 1. Android studio 使用项目gradle配置 dependencies { //glide c ...
- java中的方法引用
引用静态方法:类名称::static 方法名称: 引用某个对象的方法:对象::普通方法: 引用特定类方法:特定类::方法 引用构造方法:类名称::new 范例:引用静态方法 package com.j ...