zoukankan      html  css  js  c++  java
  • Java第02次实验(Java基本语法与类库)

    1.PTA

    1.1 综合小测验

    主要代码

    要点、注意事项

    • Eclipse自动生成快捷键解Alt+,如switch、for、while、sysout、main。
    • 使用Eclipse快速创建程序框架(利用Eclipse的quick fix功能快速创建方法)。
    • 不要重复创建Scanner对象。
    • 缩进, Tab、Shift+Tab。运行, ctrl+F11。
    • 如果JDK为1.6版本(最新版PTA已支持1.8),switch不支持字符串。需先将字将String转化为int(早期的PTA 中使用的open jdk6)
    • 使用Eclipse的quick fix功能快速创建函数int choice2Int(String choice)

    Q&A

    Q:处理输入时遇到什么问题?如何解决?
    A:处理输入时如果将nextLine()与其它next方法混用,出现行尾回车换行未处理影响下次输入的情况,在处理输入的时候,尽量只使用Scanner的nextLine()方法接收输入,不要将nextLine()与其它next方法混用

    Q:处理输入选项时采用了什么样的方式?为什么?
    A:使用了 Switch 而非 if-else ,使代码较为清晰直观,便于理解,降低代码量

    Q:sort方法和search方法都要用到同一个数组nums,是如何解决的?
    A:将要共享的int数组定义为Main类的类属性

    Q:使用nextLine()输入得到的数据如何处理成数组?
    A:String[] numStrs = line.split(" ")表示用空格分隔数据,再利用for循环和Integer.parseInt(numStrs[i])逐个将字符串类型转换为int类型存入int数组

    Q:如何抽出年月日?
    A:利用String.substring(index1,index2 )提取子字符串

    1.2 身份证排序

    主要代码

    要点、注意事项

    • sort1可直接使用Arrays.sort,String的subString。
    • 采用结构化编程方式,针对sort1sort2各写一个方法处理。
    • nextInt()nextLine()混用可能出现行尾回车换行未处理影响下次输入的情况。建议:全部使用Scanner的nextLine()处理输入以免碰到行尾回车换行问题。

    Q&A

    Q:nextInt()nextLine()混用可能产生的后果?
    A:可能出现行尾回车换行未处理影响下次输入的情况。建议:全部使用Scanner的nextLine()处理输入以免碰到行尾回车换行问题。

    Q:如何对出生年月日进行排序?
    A:String.substring截取出生年月日字符串,存入数组中,再用Arrays.sort()函数进行自动排序

    Q:如何将所有身份证按照里面的年月日升序输出?
    A:使用了两层for循环,String.substring截取出生年月日字符串,判断是否与排序过的日期相同,若相同则输出,反之不输出

    1.3 ArrayList入门

    主要代码


    Q:本题你使用了哪些关于ArraysList的方法?
    A:

    方法 描述
    add​(int index, E element) 将指定元素插入此列表中的指定位置
    add​(E e) 将指定的元素追加到此列表的末尾。
    clear() 从此列表中删除所有元素。
    contains​(Object o) 如果此列表包含指定的元素,则返回 true 。
    get​(int index) 返回此列表中指定位置的元素。
    indexOf​(Object o) 返回此列表中第一次出现的指定元素的索引,如果此列表不包含该元素,则返回-1。
    isEmpty() 如果此列表不包含任何元素,则返回 true 。
    lastIndexOf​(Object o) 返回此列表中指定元素最后一次出现的索引,如果此列表不包含该元素,则返回-1。
    remove​(int index) 删除此列表中指定位置的元素。
    remove​(Object o) 从该列表中删除指定元素的第一个匹配项(如果存在)。
    removeAll​(Collection<?> c) 从此列表中删除指定集合中包含的所有元素。
    set​(int index, E element) 用指定的元素替换此列表中指定位置的元素。
    size() 返回此列表中的元素数。

    Q:ArraysList和普通数组有什么区别?
    A:没有固定大小的限制,可以动态修改

    Q:你认为使用ArraysList有哪些优缺点?
    A:优点

    • 根据下标遍历元素效率较高。
    • 根据下标访问元素效率较高。
    • 在数组的基础上封装了对元素操作的方法。
    • 可以自动扩容。
      缺点:
    • 插入和删除的效率比较低。
    • 根据内容查找元素的效率较低。

    1.4 浮点数的精确运算

    主要代码

    要点、注意事项

    • 浮点数不精确,使用BigDecimal解决。
    • BigDecimal对象的构造(以字符串的方式构造)
    • 熟悉以面向对象的方式进行各种操作(加减乘除)。
    • BigDecimal的不可变性

    Q&A

    Q:为什么直接使用double类型数据进行运算,无法得到精确值?
    A:计算机是二进制的,浮点数没有办法是用二进制进行精确表示

    Q: BigDecimal对象的构造(以字符串的方式构造)?
    A:public BigDecimal(String val)

    Q:BigDecimal加减乘除运算?
    A:

    public BigDecimal add(BigDecimal value);                        //加法
    
    public BigDecimal subtract(BigDecimal value);                   //减法 
    
    public BigDecimal multiply(BigDecimal value);                   //乘法
    
    public BigDecimal divide(BigDecimal value);                     //除法
    

    Q:一般什么时候使用BigDecimal?
    A:要求结果精确的时候,比如商业计算

    Q:BigDecimal的不可变性如何体现?
    A:BigDecimal都是不可变的的,在进行每一步运算时,都会产生一个新的对象

     public static void main(String[] args)
        {
            BigDecimal a = new BigDecimal("4.5");
            BigDecimal b = new BigDecimal("1.5");
            a.add(b);
    
            System.out.println(a);  //输出4.5. 加减乘除方法会返回一个新的BigDecimal对象,原来的a不变
    
        }
    

    Math类应用

    2.1

    import java.math.BigDecimal;
    import java.util.Iterator;
    import java.util.Scanner;
    
    public class Main 
    {
    	public static void main(String[] args)
    	{
    		
    		Scanner sc = new Scanner(System.in);
    		int n = sc.nextInt();
    		int num[]=getNum(n);
    		double percentage =getPer(num);
    		System.out.println(percentage*100+"%");
    		System.out.println((1-percentage)*100+"%");
    		sc.close();
    	}
    	
    	private static int[] getNum(int n)
    	{
    		int num[]=new int[n];
    		for (int i = 0; i < n; i++)
    		{
    			num[i]=(int)(Math.random()*99)+1;
    		}
    		return num;
    	}
    	private static double getPer(int[] num)
    	{
    		int count=0;
    		for (int i = 0; i < num.length; i++) 
    		{
    			if(num[i]>50)
    			{
    				count++;
    			}
    		}
    		double percentage = count*1.0/num.length;
    		return percentage;
    	}
    	
    }
    
    

    2.4

    import java.math.BigDecimal;
    import java.util.Iterator;
    import java.util.Scanner;
    
    public class Main 
    {
    	public static void main(String[] args)
    	{
    		
    		Scanner sc = new Scanner(System.in);
    		int length =sc.nextInt();
    		System.out.println(generate(length));
    		sc.close();
    	}
    	public static String generate(int length)
    	{
    		char passWord[]=new char[length];
    		for (int i = 0; i < passWord.length; i++) 
    		{
    			int random = (int)(Math.random()*75);
    			while((random>'9'-'0'&&random<'A'-'0')
    					||(random>'Z'-'0'&&random<'a'-'0')
    					||random=='l'-'0')
    			{
    				random = (int)(Math.random()*75);
    			}
    			passWord[i]=(char)('0'+random);
    			System.out.println(passWord[i]);
    		}
    		String p = String.valueOf(passWord);
    		return p;
    	}
    	
    	
    }
    

    选做

    import java.math.BigDecimal;
    import java.util.Iterator;
    import java.util.Scanner;
    
    public class Main 
    {
    	public static void main(String[] args)
    	{
    		
    		Scanner sc = new Scanner(System.in);
    		int length =sc.nextInt();
    		percentage(length);
    		sc.close();
    	}
    	public static void percentage(int length)
    	{
    		char passWord[]=new char[length];
    		int eng[] = new int[length];
    		for (int i = 0; i < passWord.length; i++) 
    		{
    			int random = (int)(Math.random()*26);
    			passWord[i]=(char)('a'+random);
    			eng[passWord[i]-'a']++;
    		}
    		double per;
    		for (int i = 0; i < eng.length; i++) 
    		{
    			if(eng[i]!=0)
    			{
    				per = eng[i]*1.0/eng.length*100;
    				char e = (char)('a'+i);
    				System.out.println(e+":"+eng[i]+" "+per+"%");
    			}
    		}
    		String p = String.valueOf(passWord);
    	}
    	
    	
    }
    

    结果

  • 相关阅读:
    Python【第四章】:socket
    vb与C#的区别,片段记录
    使用XUACompatible来设置IE浏览器兼容模式
    notepad++ 的golang语法高亮
    ReSharper 配置及用法(转)
    宽度可变的Table
    JS禁止选中文本方法【转】
    只借助HTML分别禁用IE8, IE9的兼容视图模式(Compatibility View)
    测试浏览器对js版本的支持
    写有效率的SQL查询(II)(转载)
  • 原文地址:https://www.cnblogs.com/jingzheng001/p/15325542.html
Copyright © 2011-2022 走看看