南昌航空大学 软件学院 pta Java 第二次作业 蔡珂 opp
又来了hhhh
最后一题因为自作聪明多加了一个Wrong Format,wa到我怀疑人生
反正不算罚时,使劲wa
第二次还是很简单的
但我对于java语法不熟悉,做完以后看了别人的代码,决定把别人精炼的代码也贴进去
题目列表
7-1 字母-数字转换
输入一个由英文字母组成的字符串(大小写均可),将所有英文字母转换成它们在字母表中的序号,例如:“AbbcD”转换为“12234”。
输入格式:
由英文字母组成的字符串(大小写均可)。例如:“AbbcD”
若包含非英文字母,视为非法输入。
输出格式:
所有英文字母转换成它们在字母表中的序号,例如:“12234”。
非法输入输出"Wrong Format".
import java.util.Scanner; // 需要导入 util 包
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String ch;
ch = input.next();
for(int i=0;i<ch.length();i++)
{
if((ch.charAt(i)>'Z'&&ch.charAt(i)<'a')||ch.charAt(i)<'A'||ch.charAt(i)>'z')
{
System.out.printf("Wrong Format\n");
return;
}
}
for(int i=0;i<ch.length();i++)
{
int a=0;
if(ch.charAt(i)>'Z')
System.out.printf("%d",(int)(ch.charAt(i)-'a'+1));
else
System.out.printf("%d",(int)(ch.charAt(i)-'A'+1));
}
}
}
逐位判断,很简单的题目
7-2 串口字符解析
RS232是串口常用的通信协议,在异步通信模式下,串口可以一次发送5~8位数据,收发双方之间没有数据发送时线路维持高电平,相当于接收方持续收到数据“1”(称为空闲位),发送方有数据发送时,会在有效数据(5~8位,具体位数由通信双方提前设置)前加上1位起始位“0”,在有效数据之后加上1位可选的奇偶校验位和1位结束位“1”。请编写程序,模拟串口接收处理程序,注:假定有效数据是8位,奇偶校验位采用奇校验。
输入格式:
由0、1组成的二进制数据流。例如:11110111010111111001001101111111011111111101111
输出格式:
过滤掉空闲、起始、结束以及奇偶校验位之后的数据,数据之前加上序号和英文冒号。
如有多个数据,每个数据单独一行显示。
若数据不足11位或者输入数据全1没有起始位,则输出"null data",
若某个数据的结束符不为1,则输出“validate error”。
若某个数据奇偶校验错误,则输出“parity check error”。
若数据结束符和奇偶校验均不合格,输出“validate error”。
如:11011或11111111111111111。
例如:
1:11101011
2:01001101
3:validate error
import java.util.Scanner; // 需要导入 util 包
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String ch;
int flag=1;
ch = input.next();
if(ch.length()<11)
{
System.out.printf("null data");
return;
}
A:for(int i=0;i<ch.length();i++)
{
if(ch.charAt(i)=='0'&&ch.length()-i>10)
{
System.out.printf("%d:",flag++);
if(ch.charAt(i+10)!='1')
{
System.out.printf("validate error\n");
i+=10;
continue ;
}
int f=0;
for(int j=i+1;j<i+9;j++)
if(ch.charAt(j)=='1')
f++;
if(((f&1)==0&&ch.charAt(i+9)!='1')||((f&1)==1&&ch.charAt(i+9)!='0'))
{
System.out.printf("parity check error\n");
i+=10;
continue ;
}
for(int j=i+1;j<i+9;j++)
System.out.printf("%c",ch.charAt(j));
i+=10;
System.out.printf("\n");
}
}
if(flag==1)
{
System.out.printf("null data");
return;
}
}
}
有点绕,题意就是一串字符串,让你读取是否为合法数据,合法输出。判断合法条件为,最后一位为1,八位数据1的数量为奇数校验位,为0反之为1。
多几个if就行
7-3 String的格式判断与内容提取
学校学生学号格式定义如下:
2位年级号+2位学院号+2位班级号+2位序号,如19041103,
编写程序处理用全院学生学号连接起来的长字符串,学院编号为20,包括17、18、19、20四个年级,请从字符串中提取特定两个班级202017班、202061班同学的学号后四位输出,输出编号之间用空格分隔,不换行。
注意:需要排除非法输入。
输入格式:
全院学生学号组成的长字符串(学号之间无分隔)
学号格式定义如下:
2位年级号+2位学院号+2位班级号+2位序号,如19041103,
输出格式:
特定两个班级202017班、202061班同学的学号后四位
如:1701 6103 1704
import java.util.Scanner; // 需要导入 util 包
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String ch;
int flag=0;
ch = input.nextLine();
if(ch.length()%8!=0)
{
System.out.printf("Wrong Format\n");
return;
}
for(int i=0;i<ch.length();i++)
{
if(i%8==0&& (ch.startsWith("202017", i)|| ch.startsWith("202061", i)))
flag++;
if(ch.charAt(i)>'9'||ch.charAt(i)<'0')
{
System.out.printf("Wrong Format\n");
return;
}
}
// System.out.printf("%d\n",flag);
// if(flag==0)
// {
// System.out.printf("Wrong Format\n");
// return;
// }
for(int i=0;i<ch.length();i+=8)
{
if(i%8==0&& (ch.startsWith("202017", i)|| ch.startsWith("202061", i)))
{
for(int j=i+4;j<=i+7;j++)
System.out.printf("%c",ch.charAt(j));
if(--flag>0)
System.out.printf(" ");
}
}
}
}
hhh
我没把自己自作聪明的地方删掉,给大家引以为戒。
我还特判了学院和年份,结果发现没卡
题目没什么绕弯的地方
判断位数
判断是否为202017和202061的
java的字符串确实用着比c++的简单很多,但是有些人只会蠢蠢的逐位判断hhh
下面是我看到比较精炼的代码,里面用字符串的函数用的比较标准的
网址贴在最下面
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String a = in.nextLine();
//正则表达式判断输入合法性
if(!a.matches("^[0-9]*$")) {
System.out.print("Wrong Format");
return;
}
if(a.length()%8!=0) {
System.out.print("Wrong Format");
return;
}
int start,out = 0;
for(start = 0;start<a.length();start+=8) {
if(a.substring(start,start+6).equals("202017")||
a.substring(start,start+6).equals("202061")) {
if(out == 1){
System.out.print(" ");
}
System.out.print(a.substring(start+4,start+8));
out = 1;
}
}
}
}
贴上网址:https://blog.csdn.net/qq_62792553/article/details/123742347