• 20145205 《Java程序设计》第6周学习总结


    教材学习内容总结

    -若要将数据从来源中取出,可以使用输入串流;若要将数据写入目的地,可以使用输出串流。在java中,输入串流代表对象为java.in.InputStream的实例;输出串流代表对象为java.io.Outputstream的实例。

    -dump()方法接受InputStreamOutputStream实例,分别代表读取数据的来源,以及输出数据的目的地。

    -FileIntputStreamInputStream的子类,用于衔接文档以读入数据,FileOutStreamOutputStream的子类,用于衔接文档以写出数据。

    -在不使用InputStreamOutputStream时,必须使用close()方法关闭串流。由于InputStreamOutputStrem操作了java.io.Closeable接口,其父接口为java.lang.AutoCloseable接口。

    -ByteArrayInputStreamInputStream的子类,可以指定byte数据创建实例,主要操作其read()抽象方法;ByteArrayOutputStreamOutputStream的子类,主要操作其write() 的操作方法

    -串流装饰器本身并没有改变InputStreamOutputStream的行为,只是在得到数据之后,再做一些加工处理。

    -DataInputStreamDataOutputStream主要提供读取、写入java基本数据类型的方法,会自动在指定的类型与字节之间转换。

    -单线程程序:启动的程序从main()程序进入点开始至结束只有一个流程

    -多线程程序:程序有多个流程

    -在 java 中,从 main() 开始的流程会由主线程执行

    -Thread:如果想要加装主线程,就要创建Thread实例,要启动额外的主线程就是调用 Thread 实例的 start() 方法

    -额外线程执行流程的进入点,有两种方式:可以定义在 Runnablerun() 方法中继承 Thread 类,重新定义run()方法

    -Daemon 线程:

    -主线程会从 main() 方法开始执行,直到 main() 方法结束后停止 JVM

    -如果主线程中启动了额外线程,默认会等待被启动的所有线程都执行完 run() 方法才中止 JVM
    -等待与通知

    -wait()notify()notifyAll()Object 定义的方法,可以通过这三个方法控制线程释放对象的锁定,或者通知线程参与锁定竞争

    -wait():执行 synchronized 范围的程序代码期间,若要调用锁定对象的 wait() 方法,线程会释放对象锁定,并进入对象等待集合而处于阻断状态,其他线程可以竞争对象锁定,取得锁定的线程可以执行 synchronized 范围的程序代码。wait() 可以指定等待时间,时间到之后线程会再次加入排班,如果指定时间0或不指定,则线程会持续等待,只到被中断或是告知可以参与排班

    -noyify():被竞争锁定的对象调用 noyify() 时,会从对象等待集合中随机通知一个线程加入排班,再次执行 synchronized 前,被通知的线程会与其他线程共同竞争对象锁定

    -notifyAll():如果调用 notifyAll(),所有等待集合中的线程都会被通知参与排班,这些线程会与其他线程共同竞争对象锁定

    -LockReadWriteLockCondition

    -Lock 接口主要操作类之一为 ReentrantLock,可以达到synchronized 的作用,也提供额外的功能

    -想要锁定 Lock 对象,可以调用其 lock 方法,只有取得 Lock 对象锁定的线程,才可以继续往后执行程序代码,要接触锁定,可以调用 Lock 对象的 unlock()

    -Lock 接口还定义了tryLock() 方法,如果线程调用 tryLock() 可以取得锁定会返回 true,若无法取得锁定并不会发生阻断,而是返回 false

    第十章中的流概念可以应用到我们的实验中,在输入数据时,可以代替这前所用用到的Scanner字符串输入,之后再使用equals判断输入字符串是否和预先的判断条件字符串,是是否完全相等,这样进行代码部分分块,再进行判断运行。不过具体使用时救我目前掌握的知识来说,判断使用这两种方式判断条件是自己更擅长哪个的,因为我相信使用不同的方式,尤其是在JAVA中调用不同的类,而且处理方式不同时,对于数据的处理,不同的流程方式都用不同,所以有些我们看起来一样的东西或是方式,其实本质有着各种微妙的差别,因为稍微一想,如果他俩完全是一样的,干嘛需要定义两个不同的东西,完全可以舍去一个。

    代码调试中的问题和解决过程

    package cc.openhome;
    	import java.util.Arrays;
    	import java.lang.System;
    	public class shiyan2 
    	{    
    		public static int[] contact(int scores1[], int scores2[]){
    		  int[] f = new int[scores1.length+scores2.length];
    		  for(int i = 0 ; i < f.length; i++)
    		   if(i < scores1.length)
    		    f[i] = scores1[i];
    		   else
    		    f[i]= scores2[i-scores1.length];
    		  return f;
    	}
    		
    		public static void main(String[] args)
    	{   
    			int[] shuju ={88,81,74,68,78,76,77,85,95,93,87,80,73,67,77,75,76,84,94,92};
    	  
    			int[] scores1 = Arrays.copyOf(shuju,shuju.length/2);
    			  int scores2[] = new int[10];
    		      System.arraycopy(shuju[10],scores2[0],shuju.length);
    			  
    	  int temp;    
    	  int size = scores1.length;    
    	  for (int i = 0; i < size - 1; i++) 
    	  {   
    	      for (int j = i + 1; j < size; j++) 
    	      {   
    	          if (scores1[i] < scores1[j]) 
    	          { // 交换两数的位置   
    	              temp = scores1[i];   
    	              scores1[i] = scores1[j];   
    	              scores1[j] = temp;   
    	          }   
    	      }   
    	  }   
    	  int size2 = scores2.length;    
    	  for (int i = 0; i < size2 - 1; i++) {   
    	      for (int j = i + 1; j < size2; j++) {   
    	          if (scores2[i] < scores2[j]) {    
    	              temp = scores2[i];   
    	              scores2[i] = scores2[j];   
    	              scores2[j] = temp;   
    	          }   
    	      }   
    	  }   
    	  int scores3[] =ContactIntegerArray.contact(scores2, scores1);
    	  for(int score : scores3)
    	  {
    	      System.out.printf("%3d",score);
    	  }
    	  System.out.println();
    	  
    	  
    	}   
    		 
    	}	  
    		  
    	  
    

    这是我编写的数据结构实验代码,但是我在对于一个数组进行拆分后分开复制的时候,遇到了问题,因为在调用函数的时候出了先之前我有在小组提问的关于eclipse输出三个对象时就出错的问题System.arraycopy(shuju[10],scores2[0],shuju.length);本来想是查API后寻找解决办法,但是遇到了软件问题,数据结构实验JAVA实现的博客也无法最终完成,争取在下周中解决问题。

    其他(感悟、思考等,可选)

    本周因为其他课目也开了实验,自己的态度也是有所懈怠了,而且被别的事情占去了一定时间,自己也一直在感冒,当所有的偶然的因素混在一起的时候,就发生了奇妙的化学反应,我的电脑爆炸了,先是编程软件爆炸,之后装新的也是无法运行编译,之后就是电脑莫名无法执行命令,虽然都是客观因素,自己的主观态度也有问题。确实感觉最近的学习强度太大,曾经的节奏因为课程难度不断加大,自己也有一定懈怠和处理其他学生工作的事情,所以本周对于JAVA的学习确实很差,但是本周有用java进行实践,应用在了数据结构实验,希望自己的所遇到的问题在新的一周里可以解决,自己也可以重新调整态度,因为现在拉下的话滚起雪球的真是太可怕了,而且自己也要对于其他科目给予足够的时间,所有的科目一起发展。

    下面是我托管代码的情况

    下一页

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 4500行 25篇 350小时
    第一周 100/100 1/2 15/15
    第二周 150/250 1/3 12/27
    第三周 400/650 1/4 22/49
    第四周 510/1160 1/5 32/81
    第五周 831/1991 1/6 35/116
    第六周 945/2932 2/6 26/142

    参考资料

  • 相关阅读:
    web端ip定位
    【树状数组2】洛谷P3368
    【树状数组1】 洛谷P3374
    【割点】洛谷P3388
    【二分图匹配】洛谷P3386
    洛谷P4145 上帝造题的七分钟2 / 花神游历各国
    【线段树2】洛谷P3373
    【线段树1】洛谷P3372
    【乘法逆元】洛谷P3811
    【LCA】洛谷P3379
  • 原文地址:https://www.cnblogs.com/20145205y/p/5375459.html
Copyright © 2020-2023  润新知