Java第02次实验(Java基本语法与类库)

一、PTA

1.1综合小测验

对于控制台输入的处理,nextLine()方法与其他nextXXX方法混用会产生吞回车问题。建议全部使用Scanner.nextLine()处理输入以免碰到行尾回车换行问题。(相当于C语言的getline)

对于这个问题在PTA里身份证排序的那题需要统一用Scanner.nextLine(),否则会读入数据出错。

本节课堂知识点

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)

代码

import java.util.Arrays;
import java.util.Scanner;

public class Main {
static int[] nums;
	public static void main(String[] args) {
		Scanner sc= new Scanner(System.in);
		while(sc.hasNext())
		{
			String choice=sc.next();
			switch(choice)
			{
				case "fib":
					fib(sc);
					break;
                case "sort":
					sort(sc);
					break;
                case "search":
           			search(sc);
           			break;
			     case "getBirthDate":
			    	 getBirthDate(sc);
					break;
				default:
					System.out.println("exit");
					break;
			}
		}
		sc.close();
}
	
	private static void search(Scanner sc) {
		int x=sc.nextInt();
		int i=Arrays.binarySearch(nums, x);
		if(i<0) {
			System.out.println("-1");
		}
		else
		{
			System.out.println(i);
		}
			
	}

	private static void getBirthDate(Scanner sc) {
		int n=sc.nextInt();
		String id=sc.nextLine();
		System.out.println(id.substring(6, 10)+"-"+id.substring(10, 12)+"-"+id.substring(12, 14));
		
	}

	private static void sort(Scanner sc) {
		String line=sc.nextLine();
		String[] numStrs = line.split(" ");
		nums = new int [numStrs.length];
		for (int i = 0; i < nums.length; i++) {
			nums[i]=Integer.parseInt(numStrs[i]);
		}
		
		System.out.println(Arrays.toString(nums));
	}

	private static void fib(Scanner sc) {
		
		int n=sc.nextInt();
		if(n==1)
		{
			System.out.println("1");
			return;
		}
		else if(n==2)
		{
			System.out.println("1 1");
			return;
		}
		int []num=new int[n];
		num[0]=1;
		num[1]=1;
		System.out.print("1 1");
		for(int i=2;i<num.length;i++)
		{
			num[i]=num[i-1]+num[i-2];
			System.out.println(" "+num[i]);
		}
		System.out.println();
		 }
}

1.2身份证排序

主要讲:sort1可直接使用Arrays.sort,String的subString

nextInt()与nextLine()混用可能产生的后果:

nextLine()会把nextInt(),next(),nextDouble(),nextFloat()的结束换行符作为字符串读入,进而不需要从键盘输入字符串nextLine便已经转向了下一条语句执行

解决方法:

在每一个nextInt(),next(),nextDouble(),nextFloat()后都加一个nextLine()语句,将它们的结束换行符过滤

本题主要代码

//sort1
for(int i=0;i<n;i++)//抽出出生年月日
			 {
				 birth[i]=ids[i].substring(6, 10)+"-"+ids[i].substring(10, 12)+"-"+ids[i].substring(12, 14);
			 }
			 Arrays.sort(birth);//排序
			 for(int i=0;i<n;i++)
			 {
				 System.out.println(birth[i]);
			 }



//sort2
for(int i=0;i<n;i++)
			 {
                birth[i]=ids[i].substring(6, 14);
             }
			 Arrays.sort(birth);
			 for(int i=0;i<n;i++)
			 {
				 for(int j=0;j<n;j++)
				 {
					 if(ids[j].contains(birth[i]))
					 {
						 System.out.println(ids[j]);
						 break;
					 }
				 }
			 }

1.3StringBuilder

主要代码

 while(sc.hasNextInt())
		 {
			 int n,begin,end;
			 n=sc.nextInt();
			 begin=sc.nextInt();
			 end=sc.nextInt();
			 StringBuilder str=new StringBuilder("");//构造一个不带任何字符的字符串生成器
			 for (int i=0; i<n;i++) {
				str.append(i);//将 int 参数的字符串表示形式追加到此序列。
				
			}
			 System.out.println(str.substring(begin, end));//返回一个新的 String,它包含此序列当前所包含字符的子序列
		 }

 2.4动态数组

好处

动态的增加和减少元素 
实现了ICollection和IList接口 
灵活的设置数组的大小

代码

 import java.util.Scanner;
import java.util.Arrays;
import java.math.BigDecimal;
public class Main {
    	public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
         while(sc.hasNext())	
         {
        	int x=sc.nextInt();
        	String[][] str= new String[x][];
        	for(int i=0;i<x;i++)
        	{
        		str[i]=new String[i+1];
        		for(int j=0;j<=i;j++)
        		{
        			str[i][j]=(i+1)+"*"+(j+1)+"="+(i+1)*(j+1);
        			if(j<i)
        			{
        				System.out.printf("%-7s",str[i][j]);
        			}
        			else if(i==j)
        				System.out.printf("%s",str[i][j]);
        		}
        		System.out.println();

        	}
        		System.out.println(Arrays.deepToString(str));
         }
        }
}

2.5ArrayList入门

常用方法:

方法名解释
public void trimToSize()

将此 ArrayList 实例的容量调整为列表的当前大小

public void ensureCapacity(int minCapacity)

如有必要,增加此 ArrayList 实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数。

public int size()

返回此列表中的元素数。

public boolean isEmpty()

如果此列表中没有元素,则返回 true

public boolean contains(Object o)

如果此列表中包含指定的元素,则返回 true

public int indexOf(Object o)

返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1

public int lastIndexOf(Object o)

返回此列表中最后一次出现的指定元素的索引,或如果此列表不包含索引,则返回 -1

public Object clone()

返回此 ArrayList 实例的浅表副本

public Object[] toArray()

按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组。

public <T> T[] toArray(T[] a)

按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。如果指定的数组能容纳列表,则将该列表返回此处。否则,将分配一个具有指定数组的运行时类型和此列表大小的新数组。

public E get(int index)

返回此列表中指定位置上的元素。

public E set(int index,
             E element)

用指定的元素替代此列表中指定位置上的元素。

public boolean add(E e)

将指定的元素添加到此列表的尾部。

public void add(int index,
                E element)

将指定的元素插入此列表中的指定位置

public E remove(int index)

移除此列表中指定位置上的元素。

public boolean remove(Object o)

移除此列表中首次出现的指定元素(如果存在)。

public void clear()

移除此列表中的所有元素

public boolean addAll(Collection<? extends E> c)

按照指定 collection 的迭代器所返回的元素顺序,将该 collection 中的所有元素添加到此列表的尾部。

public boolean addAll(int index,
                      Collection<? extends E> c)

从指定的位置开始,将指定 collection 中的所有元素插入到此列表中

protected void removeRange(int fromIndex,
                           int toIndex)

除列表中索引在 fromIndex(包括)和 toIndex(不包括)之间的所有元素

代码:

 import java.util.Scanner;
import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;

import java.math.BigDecimal;
public class Main {
    	public static void main(String[] args) {
            List<String> strList=new ArrayList<>();
		Scanner sc =new Scanner(System.in);
		while(sc.hasNext())
		{
			String str =sc.next();
			if(!"!!end!!".equals(str))
			{
				strList.add(str);
			}
			if(str.equals("!!end!!"))
			{
				break;
			}
		}
		strList.add(0, "begin");
		strList.add("end");
		System.out.println(strList);
		String s=new String();
		s=sc.next();
		System.out.println(strList.contains(s));
		System.out.println(strList.indexOf(s));
		System.out.println(strList.lastIndexOf(s));
		System.out.println(strList.get(0));
		strList.remove(0);
		System.out.println(strList);
		s=sc.next();
		strList.set(1, s);
		System.out.println(strList);
		s=sc.next();
            sc.close();
		List<String> strList1=new ArrayList<>();
        for (int i=0; i<strList.size();i++) {
			if(strList.get(i).contains(s))
			{
				strList1.add(strList.get(i));
			}
			if(strList.equals(s))
			{
				strList.remove(s);
				break;
			}
		}
                    System.out.println(strList1);
        System.out.println(strList);
		strList.clear();
		System.out.println(strList+","+strList.size()+","+strList.isEmpty());
}
}

1.5浮点数的精确运算

主要代码

         while(sc.hasNext())	
         {
        	 String x1,x2;
        	 x1=sc.next();
        	 x2=sc.next();
        	 BigDecimal x11=new BigDecimal(x1);
        	 BigDecimal x22=new BigDecimal(x2);
        	 System.out.println(x11.add(x22));
        	 System.out.println(x11.multiply(x22));

         }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值