第一次Java作业

(一)学习总结

1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?不能只用文字描述,一定要写代码,通过具体实例加以说明。
从System.in读取一个数
输入数据保存在变量sc中,对于输入数据类型没有限制,输出需要强制类型转换;
文本扫描类Scanner(java.util.Scanner),可以使用不同的next方法将输入的文本转换为不同类型的值。

2.Random类和Math类的random()方法都能产生随机数,这两种方式有什么区别,各有什么特点呢?查阅JDK帮助文档,并举例加以说明。
util的random是一个类:包含nextInt(),nextDouble ()等类似的方法。
math的random只是一个方法:返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。
例如,对比两种方法
Math.random()可能减少每个线程对拥有自己伪随机生成器争用。Math.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");
}
}
}
该程序运行结果为:不等于0.3

原因:浮点型数据在进行运算时有极小误差。

为了处理精度损失的问题,可以使用java.math.BigDecimal类,查阅JDK帮助文档或教材p378,对上述程序进行修改

结果为0.3
4.4.在环境配置中,PATH和CLASSPATH、JAVA_HOME的作用:
1). PATH环境变量。作用是指定命令搜索路径,在命令行下面执行命令如javac编译java程序时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。我们需要把jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac/java/javadoc等待,设置好PATH变量后,就可以在任何目录下执行javac/java等工具了。

2). CLASSPATH环境变量。作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过CLASSPATH来寻找类的.class文件。我们需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录“.”也必须加入到该变量中。

javac -c 路径 (可以指定class文件存放目录)

java -cp 路径 (可以指定要执行的class目录)

3). JAVA_HOME环境变量。它指向jdk的安装目录,Eclipse/NetBeans/Tomcat等软件就是通过搜索JAVA_HOME变量来找到并使用安装好的jdk
(二)、实验总结

实验内容:
1.看商品猜价格及题目扩展

  • 设计思路
    首先根据Random函数产生随机数,再输入数据同随机数进行比较。
    定义一个count用于记录猜测次数,再根据算法把最终得分计算出来。
    使用do while循环判断
    程序
    package cai;
    import java.util.*;

public class Cai {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner in = new Scanner(System.in);
    Scanner str2 = new Scanner(System.in);
    String str = new String("yes");
    String str1 = new String("yes");
    Random rand = new Random();
    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);
}

-试验问题
总是C语言的方法思考,第一反应
我一开始想的是自己输入数据,后来想起来了Random
2.万年历
-设计思路
判断用户输入的年份是否是闰年,
计算出距1990年有多少年并通过用户输入的月份计算出距1990年1月1日有多少天,可以得到日期对应的星期,
计算月初对应的星期以及月份对应的天数并一一对应输出。
程序
package haoran;
public class Wannianli {
static final int N=1900;
public static void main1(String[] args) {
//主函数
Scanner input=new Scanner();
System.out.println("输入年份和月份,回车间隔");
int year1=input.nextInt();
int month1=input.nextInt();
printCaleder(year1,month1);
}
public static boolean isLeap(int year) {
//判断闰年
if(year%40&&year%100!=0||year%4000) {
boolean ture = false;
return ture;
}
else {
return false;
}
}
public static void two(){ //某月有几天
Scanner input=new Scanner();
int day;
int year=input.nextInt();
int month=input.nextInt();
switch(month) {
case 2:
if(year%40&&(year%100!=0)||year%4000) {
day=29;
}
else {
day=28;
}
break;
case 4:
case 6:
case 9:
case 11:day=30;break;
default:day=31;
}
System.out.printf("该月有%d天 ",day);
}
public static void three1(){ //某年某月据1900年1月1日有几天
Scanner word=new Scanner();
int year=word.nextInt();
int month=word.nextInt();
int i,day=0;
int[] daymonth=new int[] {31,28,31,30,31,30,31,31,30,31,30,31};
for(i=1900;i<year;i++) {
if(year%40&&(year%100!=0)||year%4000)
{
day+=366;
}
else {
day+=365;
}
}
if(year%40&&(year%100!=0)||year%4000) {
daymonth[1]=29;
}
for(i=0;i<month-1;i++) {
day+=daymonth[i];
}
public static void four(){ //某年某月据1900年1月1日有几天
Scanner word1=new Scanner();
int year1=word1.nextInt();
int month1=word1.nextInt();
int i1,day1=0;
int[] daymonth1=new int[] {31,28,31,30,31,30,31,31,30,31,30,31};
for(i1=1900;i1<year1;i1++) {
if(year1%40&&(year1%100!=0)||year1%4000)
{
day1+=366;
}
else {
day1+=365;
}
}
if(year1%40&&(year1%100!=0)||year1%4000) {
daymonth1[1]=29;
}
for(i1=0;i1<month1-1;i1++) {
day1+=daymonth1[i1];
}
System.out.printf("该月份据1900年1月1日有%d天! ",day1);
}
public static void printCaleder1(int year,int month) {
int a=0,i,day;
day=days(year,month);
System.out.println(" "+year+"年"+month+"月");
System.out.println("星期日 星期一 星期二 星期三 星期四 星期五 星期六");
a=1+totalDays(year,month)%7;
if(a1)
{
System.out.print(" ");
}
else if(a
2)
{
System.out.println(" ");
}
else if(a3)
{
System.out.println(" ");
}
else if(a
4)
{
System.out.println(" ");
}
else if(a5)
{
System.out.println(" ");
}
else if(a
6)
{
System.out.println(" ");
}
else if(a7)
{
System.out.println(" ");
}
for(i=1;i<=day;i++){
System.out.println(" "+i);
System.out.println(" ");
if((a+i)%7
0) {
System.out.println(" ");
System.out.println(" ");
}
}

	}
	
	
 }

-试验问题
问题:在对查询月份月初前边应该空出几格时出现疑问
原因:不知道如何空出合适的格数以及如何时把第一行的每一天对应的位置进行分配
3.评分系统
-设计思路
用一个二维数组存放每个评委给每个选手的得分;
分别用一维数组表示每个选手的最高分,最低分,和去掉一个最高分一个最低分的平均分;学的maxcore不太适用,那个只能找到最大,但是不能去掉;
对二维数组的行从高到低排序,得到每一行的最大值最小值分别存放在表示最高分和最低分的一维数组中。
分别计算每个选手的最终得分,存放在平均分数组中。
按照从高到低的顺序分别输出每个选手的得分和每个选手的平均分。
程序
package pingfen;

import java.util.*;

public class Pingfen {

public static void main(String[] args) {
	System.out.println("请评委给5位选手在1-10分之内打分!
");
	int i,j;
	int[][] arr={{5,6,9,7,8,9,6,8,8,7},{9,9,8,8,7,7,9,8,8,5},{8,6,5,4,9,7,8,6,9,7},{8,6,7,9,5,9,6,8,7,8},{9,9,8,7,5,8,5,6,7,6}};
	double[] ave = new double[5];
	System.out.println("5位选手成绩分别为:");
	for(i=0;i<5;i++){
	    for(j=0;j<10;j++){
	        System.out.printf("%5d",arr[i][j]);
	    }
	    System.out.printf("
");
	}
	int[] max=maxscore(arr);
	System.out.println("5位选手最高成绩分别为:");
	for(i=0;i<max.length;i++)
	{
	    System.out.printf("%5d",max[i]);
	}
	int[] min=maxscore(arr);
	System.out.println("
5位选手最低成绩分别为:");
	for(i=0;i<5;i++){
	    for(j=0;j<10;j++){
	        System.out.printf("%5d",arr[i][j]);
	    }
	    System.out.printf("
");
	}
	private static int[] maxscore(int[][] arr) {
	// TODO Auto-generated method stub
	return null;
}
	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]);
        }

    }
	private static int getMin(int[][] score) {
		// TODO Auto-generated method stub
		return 0;
	private static int getMax(int[][] score) {
			// TODO Auto-generated method stub
			return 0;
	}

-试验问题
注意数组越界问题

代码托管

原文地址:https://www.cnblogs.com/haoran333/p/8594781.html