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();
}
}