前三次PTA作业题目集总结
前三次PTA作业题目集总结
(1)前言:
对于我来说,第一次作业题目量相对较多但多数相对简单,后面几题不是很明白该怎么做。第一次作业中主要包含基础的输入输出,数组,字符串的运用,而我对字符串,数组不怎么熟练,与其对应的题目也写不到。而且我写作业时发现Java很严谨,说浮点数就不能用double只能用float。我用double还疑惑为什么错,问了同学,才知道错在哪。第二次PTA作业虽然题目只有三道但是后面两题难度较难。第二次知识点包括字母字符串的转换,串口字符串的解析,String的格式判断与内容提取。我习惯将字符串转换为数组在进行计算,遇到那些长度很长且不固定的字符串就束手无策了。第三次PTA作业也只有三题,三题是相互联系的,难度逐渐提升,我也是第一次创建不同的类来解决不同的问题,我开始就是一个类直接莽。
第三次作业知识点包括正则表达式,boolean函数的应用等。
(2)设计与分析:第一次作业中的第8题-二进制数字的提取。我的源码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s =in.nextLine();
char str[] = s.toCharArray();
int n =str.length;
int i;
for(i=0;i<str.length;i++){
int j=0;
if(str[i]==1||str[i]==0){
number[j]=str[i];
j++;
}
if(str[i]==-1)
break;
}
System.out.println(number[n]);
}
}
我的想法是将字符串中的字母或数字带入数组中再进行运算,但是我想简单了,还有好几个测试点没过,例如字母数字混合输入就不行。我应该直接用字符串不用数组来做。
修改后代码为
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner (System.in);
String a = in.nextLine();
String b = "";
for(int i=0;i<a.length();i++) {
if(a.charAt(i)=='0'||a.charAt(i)=='1') {
b += a.charAt(i);
}else if(a.charAt(i)=='-') {
if(a.charAt(i+1)=='1') {
System.out.print(b);
return;
}
}
}
System.out.print("Wrong Format");
}
}
相较于next我更喜欢用nextline,因为next输入遇到空格会停止,而nextline不会。
第二次作业中的7-2,我一看到题就想把字符串转化为数组来写,我写了会发现不对经,数组不好处理,还是直接用字符串写,然后发现还是不会,就是我菜。想着写一点算一点,能拿多少分就拿多少分。我的源码: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.length()<11){
System.out.println("null data");
}
if(a.matches("^[1]*$")) {
System.out.print("null data");
}
int start=0,i=0,sum=0,num=1;
for(start=0;start<a.length()-10;start++){
if(a.charAt(start)=='0'){
System.out.print(num+":");
num++;
}
}
}
}
我就写了。长度少于11位的情况和没有初始位的情况,我真是看到那长长的一大串数字就感到头皮发麻,再加上是快截止的时间,脑袋发懵根本不会,真的是越急越不会做,我应该早点做花多一点时间。
我代码都没写完
第三次题目集;
7-1:点线形系列1-计算两点间的距离
我开始看到题目时认为应该不怎么难,动手敲代码时却不知道该如何下手,输入一个点的坐标中的“,”不知该怎么处理,后面听了老师讲的正则表达式,可以用正则表达式来处理“,”,我学了会正则表达式发现好难懂,硬着头皮写了个从字符串中提取浮点数的正则表达式。把“,”提取出来,再将数字放到数组中去。还建立了一个point类代表点的坐标,里面添加上一个求两点间距离的函数。我的源码:
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int count=0;
point p1=new point();
point p2=new point();
String str=in.nextLine();
double[]number=new double[100];
Pattern pattern = Pattern.compile("-?([1-9]\\d*\\.?\\d*|0\\.\\d*[1-9]\\d*|0?\\.0+|0)");
Matcher matcher = pattern.matcher(str);
while (matcher.find()){
String res = matcher.group();
int n=res.length();
if (res.length()>0){
number[count]=Double.parseDouble(res);
count++;
}
}
if(count>=5) {
System.out.println("wrong number of points");
}
else {
p1.x=number[0];
p1.y=number[1];
p2.x=number[2];
p2.y=number[3];
double r = p1.getdis(p2);
System.out.println(r);
}
}
}
class point{
double x,y;
double getdis(point p) {
x=this.x;
y=this.y;
double distance=Math.sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y));
return distance;
}
}
我写point类中的函数时,没把x赋值为this.x,y赋值为this.y.导致我输入数据没有得到预期的结果。当一个类的属性名与访问该属性的方法参数名相同时,则需要使用this关键词来访问类中的属性,以区分类的属性和方法中的参数。正则表达式不怎么会也就不会判断字符串的格式是否合法。我可以学习正则表达式来写一个判断格式的函数来完善我的代码。
7-2:点线形系列2-线的计算
在点的类point的前提下加一个线的类line,线由点构成,在创造一些函数来解决问题。我的代码
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int count=0;
int a=0;
point p1=new point();
point p2=new point();
point p3=new point();
point p4=new point();
line l1=new line();
String str=in.nextLine();
double[]number=new double[100];
Pattern pattern = Pattern.compile("-?([1-9]\\d*\\.?\\d*|0\\.\\d*[1-9]\\d*|0?\\.0+|0)");
Matcher matcher = pattern.matcher(str);
while (matcher.find()){
String res = matcher.group();
int n=res.length();
if (res.length()>0){
number[count]=Double.parseDouble(res);
count++;
}
}
a=(int)number[0];
p1.x=number[1];
p1.y=number[2];
p2.x=number[3];
p2.y=number[4];
p3.x=number[5];
p3.y=number[6];
p4.x=number[7];
p4.y=number[8];
//double r = p1.getdis(p2);
if(a==1) {
l1.Getslope(p1,p2);
}
if(a==2) {
l1.Dis(p1, p2, p3);
}
if(a==3) {
System.out.println(l1.isOnline(p1, p2, p3));
}
}
}
class point{
double x;
double y;
/*double getdis(point p) {
x=this.x;
y=this.y;
double distance=Math.sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y));
return distance;
}*/
}
class line{
point p1,p2,p3;
void Getslope(point p1,point p2){
//point p=new point();
if(p1.x==p2.x&&p1.y==p2.y) {
System.out.println("points coincide");
}
else if(p1.x==p2.x&&p1.y!=p2.y){
System.out.println("Slope does not exist");
}
else {
double slope=(p2.y-p1.y)/(p2.x-p1.x);
System.out.println(slope);
}
//return 0;
}
void Dis(point p1,point p2,point p3) {
double k=(p2.y-p3.y)/(p2.x-p3.x);
double c=p2.y-k*p2.x;
double s;
if(p2.x==p3.x&&p2.y!=p3.y) {
s=Math.abs(p1.x-p2.x);
}
else {
s=Math.abs(p1.y-k*p1.x-c)/(Math.sqrt(1+k*k));
}
System.out.println(s);
}
boolean isOnline(point p1,point p2,point p3) {
double k1,k2;
k1=(p2.y-p3.y)/(p2.x-p3.x);
k2=(p1.y-p3.y)/(p1.x-p3.x);
if(p1.x==p2.x&&p2.x==p3.x&&p1.y!=p2.y&&p1.y!=p3.y&&p2.y!=p3.y) {
return true;
}
else if(k1==k2){
return true;
}
else {
return false;
}
}
}
由于写的时间较晚,时间截止了,还有部分问题的代码没写出来。还有格式问题同7-1.
7-3:点线形系列3-三角形的计算
在7-2的前提下建立三角形的类,三角形由三个点构成。在三角形的类中创造函数。由于时间不够一点代码都没写,下次一定控制好自己的时间。
总结:
我开始写代码是面对过程不是面对对象,学到了该如何面对对象写代码,我需要在字符串上下大工夫,学习正则表达式来判断格式。自己也要调整好自己的心态,控制好自己的时间,要多花时间,不是像对待c那样对待Java,那样作业会很难完成。我感觉作业不错,难度逐步提升,知识点也多,起到巩固且加深的作用。实验我也能从中学到不少有关Java的知识。老师博学多才,自己出的题测试点也多。课上应该多出问题来巩固知识点。课下没什么意见。
                    
                
                
            
        
浙公网安备 33010602011771号