zoukankan      html  css  js  c++  java
  • 18/3/12 学习总结

    (一)学习总结

    1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?不能只用文字描述,一定要写代码,通过具体实例加以说明。
    2.Random类和Math类的random()方法都能产生随机数,这两种方式有什么区别,各有什么特点呢?查阅JDK帮助文档,并举例加以说明。
    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");
    }
    }
    }
    为了处理精度损失的问题,可以使用java.math.BigDecimal类,查阅JDK帮助文档或教材p378,对上述程序进行修改。
    package 日常瞎写;
    import java.util.;
    import java.math.BigDecimal;
    public class Xiaxie {
    public static void main(String args[]) {
    double b = 0.1;
    double c = 0.1;
    double sum=0;
    sum=Math.round(Math.add(0.1,0.1,0.1),1);
    System.out.println(sum);
    if(sum==0.3){
    System.out.println("等于0.3");
    }else {
    System.out.println("不等于0.3");
    }
    }
    }
    class Math{
    public static double add(double a1,double a2,double a3){
    BigDecimal x1=new BigDecimal(a1);
    BigDecimal x2=new BigDecimal(a2);
    BigDecimal x3=new BigDecimal(a3);
    return x1.add(x2).add(x3).doubleValue();
    }
    public static double round(double d,int len){
    BigDecimal x1=new BigDecimal(d);
    BigDecimal x2=new BigDecimal(1);
    return x1.divide(x2,len,BigDecimal.ROUND_HALF_UP).doubleValue();
    }
    }
    4.本次学习要点中其他需要总结的内容:因人而异,根据自己的学习情况,记录难掌握或难理解的内容,以及学有心得的内容。还存在哪些问题,也可以提出来,对于同学在博客中提出的问题,大家可以积极讨论,互帮互学。
    作业:(一)
    1.首先创建一个Scanner对象s,构造函数的初始值为System.in,再利用s.nextInt()来接收一个int型数据ival的值,用s.nextLine()来接收String类型的name,然后分别输出。
    package 日常瞎写;
    import java.util.
    ;
    public class Xiaxie {

    public static void main(String[] args) {
    	int a;
    	Scanner input=new Scanner(System.in);
    	   System.out.println("请输入个值a:");
    	  a=Integer.parseInt(input.next());
    	/*Scanner input = new Scanner(System.in);
    	System.out.println("请输入a:");
    	a= input.nextInt();*/
    	System.out.print("a:"+a);
    	
    }		
    

    }
    我尝试用两种方法输出/----/中也是方法之一,如果是一维数组二维数组加上循环就可以了。
    2.Math.random()返回的只是从0到1之间的小数,如果要50到100,就先放大50倍,即0到50之间,这里还是小数,如果要整数,就强制转换int,然后再加上50即为50~100.
    Random内Random rand=new Random();int a;a=rand.nextInt(100)+1;a是随便设定的,(100)+1给的是范围1-100内的随机数。
    3.答案为不等于0.3,double是双精度类型 不是什么小数类型,在标称语言里,float和double都不是精确地值,float a=1可能存的数值是0.999999,java里有类可以解决此类问题。
    4.我的c语言底子很差,感觉java写起来有些费劲,不过java便利的是引用类可以节省我们很大的功夫,比如sort排序,不用自己排序系统就自动的帮你了,java有很多类,以后我会用得着,不过现在我还没看
    马上就要接触面对对象这个问题了,我决定这学期无论java语言有多困难,我也不会抄袭别人的程序,磕磕绊绊也好,停滞不前也好,我想要自己完成我的java结课设计。

    (二)实验总结

    实验内容:
    1.看商品猜价格
    2.万年历
    3.评分系统
    对完成实验内容过程中遇到的问题、解决方案以及程序的设计思路和思考等进行归纳总结。
    格式如下:
    程序设计思路:XXXXXXX
    问题1:XXXXXXX
    原因:XXXXXXX
    解决方案:XXXXXXX
    问题2:XXXXXXX
    原因:XXXXXXX
    解决方案:XXXXXXX
    (二):
    1代码:
    import java.util.Random;
    import java.util.Scanner;
    import java.util.;//util类型的类统统可以用.表示

    public class Demo {

    public static void main(String[] args) {
    	// TODO Auto-generated method stub
    	Scanner in=new Scanner(System.in);//Scanner是一个类,扫描从控制台输入的字符;简单来说是c语言中的scanf;
    	Scanner input=new Scanner(System.in);
    	Random rand=new Random();//创建一个随机对象rand,rand可以为任意字母
    	int x,a,b=0,c,answer=0,q=0;
    	String str=null;
    	q=rand.nextInt(100)+1;//给定商品的随机价格:q;
    //	System.out.println(q);
    	String an="y";//对do while循环的判断定义y;
    	do{
    		
    		go:for(int i=0;i<=4;i++){
    			System.out.print("请输入一个价格");
    			a=Integer.parseInt(input.next());//Integer.parseint()就是把整形对象Integer转换成基本数据类型int(整数);
    			//input.next是接受键盘的数据,还是懵逼,总之是得到自己想要输入的数就对了
    			b++;
    			if(a>q){
    				System.out.println("too large");
    			}
    			else if(a<q){
    				System.out.println("too little");
    			}
    			else if(a==q){
    				System.out.println("恭喜您,答对了");
    				break go;
    			}
    			//break后加空格在加go;go:指向的位置为自己想要跳出的循环 
    		}
    		System.out.println("您用光了所有机会");	
    		System.out.println("您总共猜了"+(b)+"次");
    		System.out.println("是否继续,继续请输入y");
    		an=input.next();
    	}while("y".equals(an));
    	
    	
    	if(b>5)
    	{
    		answer=0;
    	}
    	else if(b>=0&&b<=5){
    	answer=100-20*b;
    	}
    	System.out.println("答案为:"+q);
    	System.out.println("您的分数为:"+answer);
    }
    

    }
    我的设计思路是先给定一个100以内的随机数,然后用do-while循环判断是否猜对了价格,最后判断是否继续,这个没有太大的问题,就是总是写错大小写。

    package 万年历;
    import java.util.*;
    public class Demo2 {

    public static void main(String[] args) {
    	// TODO Auto-generated method stub
    	int year, month, x,sum=0;
    	Scanner input = new Scanner(System.in);
    	System.out.println("请输入年:");
    	year = input.nextInt();
    	System.out.print("请输入月份:");
    	month = input.nextInt();
    	int day = 0;
    	int firstday = 0;
    	int days = 0;
    	
    	
    if(isLeap(year)){
    	System.out.println(""+year+"是闰年");
    }
    else{
    	System.out.println(""+year+"不是闰年");
    }
    
    day=days(year,month);
    System.out.println(year+"年"+month+"月有"+day+"天");
    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 days=0;
    if (month == 2) {
    if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
    days = 29;
    }
    else {
    days = 28;
    }
    }
    else if (month == 4 || month == 6 || month == 9 || month == 11) {
    days = 30;
    }
    else {
    days = 31;
    }
    return days;
    }
    public static void printCalender(int year, int month) { // 计算某年某月之前距1900年1月1日的天数
    int x,sum=0;
    int day=0;
    for (int i = 1900; i < year; i++) { // 计算1900年1月1日的天数
    if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)) {
    day = day + 366;
    } else {
    day = day + 365;
    }
    }
    int beforedays = 0;
    for (int i = 1; i < month; i++) {
    if (i == 2) {
    if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
    sum += 29;
    }
    else {
    sum += 28;
    }
    }
    else {
    if (i == 4 || i == 6 || i == 9 || month == 11) {
    sum += 30;
    }
    else {
    sum += 31;
    }
    }
    }
    int days = 0;
    if (month == 2) {
    if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
    days = 29;
    }
    else {
    days = 28;
    }
    }
    else if (month == 4 || month == 6 || month == 9 || month == 11) {
    days = 30;
    }
    else {
    days = 31;
    }
    System.out.println("");
    int temp =sum % 7;
    /* 输出日历 */
    System.out.println("星期日 星期一 星期二 星期三 星期四 星期五 星期六");
    for (int i = 1; i < temp; i++) {
    System.out.print(" ");
    }
    for(int i=1;i<=days;i++){

    		if(sum%7==0){
    			System.out.print(i+"
    ");
    		}
    		else{
    			System.out.print(i+"	");
    		}
    		sum+=1;
    	}
    	System.out.println("");
    	day=sum+day; 
    	System.out.println(""+year+"年"+month+"月距1900年1月1日的天数为"+day+"天");
    }
    

    }
    我打算按照c语言的发法来,所以调用函数以及日期都是按照c语言来的,判断的时候布尔函数让我很是头疼,因为不知道怎么调用,最后不得不百度。
    问题一:布尔函数不知道怎么返回值,也不知道怎么用
    原因:boolean的返回值只有true和flase
    解决方法:我让返回值为true或者flase调用的时候用if语言直接用函数名,if为真,判断为闰年。

    3.package 评分系统;
    import java.util.Arrays;
    import java.util.*;
    class Demo3 {

    public static void main(String[] args) {
        int arr[][];
    	arr=new int[5][10];
    	Random rand=new Random();
    	  for (int i = 0; i < arr.length; i++) {
                for (int j = 0; j < arr[i].length; j++) {
                    arr[i][j] = new Random().nextInt(10)+1;
                }
          }
        System.out.println("排序前:");
        for(int i=0;i<arr.length;i++){
    		  System.out.print("选手"+(i+1)+":	");
    		  for(int j=0;j<arr[i].length;j++){
    			  System.out.print(arr[i][j]+"	");
    		  }
    		  System.out.println("");
    	  } 
        for (int[] is : arr) {
            sort(is);
        }
       int paixu[]=new int[10];
       int ave=0;
        System.out.println("排序后:");  
        for(int i=0;i<arr.length;i++){
        	int sum=0;
    		  System.out.print("选手"+(i+1)+":	");
    		  for(int j=0;j<arr[i].length;j++){
    			  System.out.print(arr[i][j]+"	");
    			  sum=sum+arr[i][j];
    			 
    			
    		  }
    		  ave=sum/arr[i].length;
    		  System.out.print("平均值为:"+ave+"	");
    			// paixu[i]=float (ave);
    		  System.out.println("");
    		  
    	  } 
    //	System.out.println("sum="+sum);
        System.out.println("去掉每位选手的最高分和最低分");
        for(int i=0;i<arr.length;i++){
    		  System.out.print("选手"+(i+1)+":	");
    		  for(int j=1;j<arr[i].length-1;j++){
    			  System.out.print(arr[i][j]+"	");
    		  }
    		  System.out.println("");
    	  }  
        int x,y;
        
      
        for (int i= 0; i < 5; i++) {
    		System.out.print("第" + (i + 1) + "行最大值:	");
    		System.out.print(hasmax(arr[i], arr[i].length));
    	}
    	System.out.println();
    	for (int i= 0; i < 5; i++) {
    		System.out.print("第" + (i + 1) + "行最小值:	");
    		System.out.print(hasmin(arr[i], arr[i].length));
    	}
    	System.out.println();
    	
    /*	for (int i= 0; i < 5; i++) {
    		System.out.print(hasave(arr[i],arr[i].length));
    	}*/
    }
    

    private static void sort(int[] is) {

        for (int i = 0; i < is.length - 1; i++) {
            for (int j = i; j < is.length; j++) {
                if (is[i] > is[j]) {
                    int tmp = is[i];
                    is[i] = is[j];
                    is[j] = tmp;
                }
            }
        }
    }
    

    /* public static void max(int[][] arr2){
    int arr[][]=new int[5][];
    int a[]=new int[5];
    System.out.println("asdada");
    for(int i=0;i<arr.length;i++){

    		  for(int j=1;j<arr[i].length-1;j++){
    			  if(arr[i][j]>a[i]){
    				  a[i]=arr[i][j];
    			  }
    		  }
    		  System.out.print("a[i]:"+a[i]);			  
    	  }   
    

    }
    public static int min(int[] arr1){
    int arr[][]=new int[5][];
    int b=0;
    for(int i=0;i<arr.length;i++){
    for(int j=1;j<arr[i].length-1;j++){
    if(arr[i][j]>b){
    b=arr[i][j];
    }
    }
    System.out.println("");
    }
    return b;
    }*/
    private static int hasmax(int a[], int n) {
    int max = a[0];
    for (int i = 1; i < n; i++)
    if (max < a[i])
    max = a[i];
    return max;
    }

    private static int hasmin(int a[], int n) {
    int min = a[0];
    for (int i = 1; i < n; i++)
    if (min >a[i])
    min = a[i];
    return min;
    }
    private static void hasave(int a[], int n){
    int aver=a[0],sum=0;
    float ave;
    for(int i=1;i<n;i++){
    sum=sum+a[i];
    }
    ave=sum/8;
    System.out.println("aave="+ave);
    }
    }
    我用for循环创建二位随机数组,然后排序之后,偷了个懒,输出直接跳过第一位和最后一位,然后进行输出
    问题一:我一直在捉摸怎么判断长度然后换行
    原因:java里可以直接在数组名后加.。
    解决方法:我用arr.length或者arr[i].length判断长度换行
    问题二:调用函数我用的二维数组
    原因:不清楚返回值究竟是个数组还是个数
    解决方法:我不知道能不能返回数组,我直接返回一个数在循环里面

    (三)代码托管

    码云提交历史截图
    上传实验项目代码到码云,在码云项目中选择“统计-提交”,设置搜索时间段,搜索本周提交历史,并截图。

  • 相关阅读:
    双链表 teacherboubleloopnohead
    System.Reflection(温习二)
    在地址栏调试js(小技巧)
    在vs2005中的ReportViewer(RDLC报表)中使用直接打印功能,在vs2005使用ReportViewer2008
    .net的手动编译类方法
    System.Reflection(温习)
    https://imo.im/
    SOA是什么(转)
    ASP.NET的编译方法(转,复习一下)
    动态生成一个继承接口的类
  • 原文地址:https://www.cnblogs.com/yeqingsong/p/8548078.html
Copyright © 2011-2022 走看看