PTA 7-2 office文档页码打印 (20 分) Java

PTA 7-2 office文档页码打印 (20 分) Java

更新:对之前的代码重写了一遍,使之更加简洁明了

从此题中我学会了使用两个函数split和Integer.parseInt()
o(╥﹏╥)o

在office软件(word,excel)中,有时只需要打印整个文档中的一部分,就需要用户选择需要打印的页码范围。目前输入的页码范围格式定义为:以逗号分割,可以使用-表示连续页码。例如:1,3,5-9,20。表示需要打印的页码为1,3,5,6,7,8,9,20。

本题目要求读入一行字符串,作为需要打印的页码范围。需要注意以下几点:

1、页码范围输入可以不按顺序。例如:5,3,7,9-10,1-2;
2、连续的页码定义也可能不会按照由小到大的顺序输入。例如:1,9,5,20-15,10;
3、输入的页码范围可能会有重复。例如:1,9,15,5-10,12-20;
输入格式:
第一行:表示页码范围的格式化字符串

输出格式:
将需要打印的页码按照由小到大的顺序输出,以空格分割

输入样例:
1,3,5-9,20
输出样例:
1 3 5 6 7 8 9 20
输入样例:
12-20,1,15,9,5-10
输出样例:
1 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20

更新前

import java.util.*;

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String arr;
        int m=0;
        int flag=0;
        int x=0,y=0,temp;
        int a[] = new int[100];
        arr = sc.nextLine();
        String[] ss = arr.split(",");
        for(String s: ss)
        {
        	if(s.indexOf("-")<0)
        		{
        		    a[m]=Integer.parseInt(s);
        		    m++;
        		}
        	else
        		{
        		    String[] s1 = s.split("-");
        		    for(String s2: s1)      //这里为了将两个s2提取出来可能用了比较怪的方法,应该会有更好的方法
        		    {
        		    	if(flag==0)
        		    	    {
        		    		    x = Integer.parseInt(s2);
        		    		    flag=1;
        		    	    }
        		    	else
        		    		y = Integer.parseInt(s2);
        		    }
        		    if(x>y)
        		    {
        		    	temp=x;
        		    	x=y;
        		    	y=temp;
        		    }
        		    for(int i=x;i<=y;i++)
        		    {
        		    	a[m]=i;
        		    	m++;
        		    }
        		    flag=0;
        		}
        	
        }
        Arrays.sort(a,0,m);
        System.out.print(a[0]);
        for(int i=1;i<m;i++)
            {
        	    if(a[i]!=a[i-1])
        	        System.out.print(" "+a[i]);
            }
        sc.close();
    }
}

更新后

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

public class Main{
    public static void main(String[] args) {
         Scanner sc = new Scanner(System.in);
         String arr;
         int num[] = new int[100];
         int m=0;
         arr = sc.nextLine();
         String s[] = arr.split(",");
         for(String a:s) {
        	 if(a.contains("-")) {
        		 String[] s1 = a.split("-");
        		 int max,min;
        		 if(Integer.parseInt(s1[0])>Integer.parseInt(s1[1])) {
        			 min = Integer.parseInt(s1[1]);
        			 max = Integer.parseInt(s1[0]);
        	     }
        		 else {
        			 min = Integer.parseInt(s1[0]);
        			 max = Integer.parseInt(s1[1]);
        		 }
        		 for(int i=min;i<=max;i++,m++)
        			 num[m] = i;
        		 
        	 }
        	 else {
        		 num[m] = Integer.parseInt(a);
        		 m++;
        	 }
         }
         Arrays.sort(num,0,m);
         System.out.print(num[0]);
         for(int i=1;i<m;i++) {
        	 if(num[i]!=num[i-1])      //输出去重
        	     System.out.print(" "+num[i]);
         }
         sc.close(); 
    }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值