首页 > 其他分享 >PTA题目集1~3的总结性Blog

PTA题目集1~3的总结性Blog

时间:2023-04-01 23:45:04浏览次数:34  
标签:总结性 java String int PTA Blog sc new public

(1)前言:

  目前发布了三次pta作业,第一次作业的题量适中,较为简单,主要了解了substring函数,math类,charAt方法的使用;在第二次作业中,首次出现了菜单计价程序编写的题目,题目量少但难度高,其中主要学习了StreamTokenizer快速输入的方法,类与类之间的调用联系,equal方法的使用等等;而在第三次的作业中题量适中,而难度在不断加大,任然有菜单计价程序的升级作业,以及时间类函数的使用,HashSet方法(无序插入不可重复);

(2)设计与分析:

  题目集2:7-1 菜单计价程序-1:

 

import java.util.Scanner;

public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
Menu m = new Menu();
Order o = new Order();
String n = null;
int i = 0;
int j = 0;
while(!"end".equals(n)){//判断菜单最后是否时end,使用equals直接比较数组n内的内容
n = sc.nextLine();
if(n.equals("end")){
break;
}
String[] tem1 = n.split(" ");
o.records[i] = new Record();
o.records[i] = o.addARecord(tem1[0],Integer.parseInt(tem1[1]));//进制转换
i++;
j++;
}
Dish x;
for(i=0;i<j;i++){
x = m.searthDish(o.records[i].d.name);
if(x==null){
System.out.println(o.records[i].d.name+" "+"does not exist");//判断所点菜是否在菜谱上存在

}
else{
o.records[i].d.unit_price = x.unit_price;
}
}
System.out.println(o.getTotalPrice());
}
}
class Dish{
String name;
int unit_price;
int getPrice(int portion){//设置菜价,根据不同份额计算价格


int price = 0;
if(portion==1)
{
price = (int)unit_price;
}
else if(portion==2)
{
price = Math.round((float)(unit_price*1.5));
}
else if(portion==3)
{
price = (int)(unit_price*2);
}
return price;
}
}
class Menu{
Dish[] dishs = new Dish[4];
Dish searthDish(String dishName){//设置菜名与单价
dishs[0] = new Dish();
dishs[1] = new Dish();
dishs[2] = new Dish();
dishs[3] = new Dish();

dishs[0].name ="西红柿炒蛋";
dishs[1].name = "清炒土豆丝";
dishs[2].name = "麻婆豆腐";
dishs[3].name = "油淋生菜";

dishs[0].unit_price = 15;
dishs[1].unit_price = 12;
dishs[2].unit_price = 12;
dishs[3].unit_price = 9;
for(int i=0;i<4;i++){
if(dishName.equals(dishs[i].name)){//判断菜品是否存在
return dishs[i];
}
}
return null;
}
}
class Record{
Dish d = new Dish();
int portion;
int getPrice(){
return d.getPrice(portion);
}
}
class Order{
Record[] records = new Record[10000];//设置菜单上限
int count = 0;
int getTotalPrice(){
int tprice = 0;
for(int i = 0;i < count;i++){
tprice = tprice + records[i].getPrice();
}
return tprice;
}
Record addARecord(String dishName,int portion){
Record a = new Record();
a.d.name = dishName;
a.portion = portion;
count++;
return a;
}
}

 

心得:

写此题时开始没啥思路,但是先把类都写出来大致体系,再根据类与类之间联系,一步一步写出其中的相关的步骤与关系,理清调用关系,便可以一点一点写出每个类的关系与每种类中的方法,属性。但是写此题需有一定的java基础,了解语法使用,才能够有一定的思路写出题目。本人因基础不扎实,所以常常出现基础错误,甚至没有思路写程序。期间遇到错误大多也是为类与类之间的联系逻辑出现错误,无法正常调用。

题目集2:7-2:此题因自身原因未及时写完,因此源代码无。

但是此题对于7-1只加了一个删除程序,只需比对点菜记录中的菜的序号,然后删除即可。

题目集3:7-1:

题目集3:7-2:

 

import java.util.HashSet;
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
sc.nextLine();
String str = sc.nextLine();
String[] a = str.split(" ");
HashSet<String> b = new HashSet<String>();//利用hasset类进行无序不重复输入
for(int i=0;i<n;i++)
{
b.add(a[i]);
}
int size = b.size();
if(size==n)//因重复无法输入所以根据size与n是否相等判断有无重复字母

{
System.out.println("NO");
}
else{
System.out.println("YES");
}
}

}

 

心得:hasset的使用及其方便判断此题,因为只需要判断是否有重复字母无需考虑其他,一个简单的比较就可以完成判断。

(3)采坑心得:

a. 对于第一次作业中多个题目需要进行强制类型转换,否则题目测试点无法通过。如下题要将结果从double转化为float类型,否则报错。

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        
        int n = input.nextInt();
        int f = input.nextInt();
        int p = input.nextInt();
        float s = input.nextFloat();
        
        double y = (double)f*10000*0.0005;
        double j = (double)s*3.0;
        double c = (double)s*1.36;
        double q;
        if(n==1)
        {
        if(s<=90)
            q =(double) p*0.01*10000;
        else if(s<=144&&s>90)
            q =(double) p*0.015*10000;
        else //if(s>144)
            q =(double) p*0.03*10000;
        }
        else //if(n>1)
        {
            q =(double) p*0.03*10000;
        }
        System.out.print((float)q+" "+(float)y+" "+(float)j+" "+(float)c);
    }
}

 

b. print与println之间的区别会影响到输出结果的判定。如下题,输出结果应考虑最后一行不能多输出一行空行,否则无法通过测试点,所以加else判定最后一行用print输出。

import java.util.*;
import java.io.*;

public class Main{
    public static void main(String[] args)throws IOException{
        int[] a = new int[10001];
        long[] b = new long[1000];
        b[0] = 1;b[1] = 1;b[2] = 2;b[3] = 4;b[4] = 8;
        StreamTokenizer re = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
        re.nextToken();
        int m = (int)re.nval;
                for(int i=1;i<=m;i++){
             re.nextToken();
            a[i] = (int)re.nval;
        }
            for(int i=1;i<=m;i++){
            if(a[i]==0)
                System.out.println(0);
            else if(a[i]<5){
                if(i!=m)
                System.out.println(b[a[i]]);
                else
                    System.out.print(b[a[i]]);
            }
            else{
                    for (int j = 5; j <= a[i]; j++){
                    b[j] = 2 * b[j - 1] - b[j - 5];
                    }
                        if(i!=m)
                System.out.println(b[a[i]]);
                        else
                            System.out.print(b[a[i]]);
            }
        }
    }
}

c. 在写java程序时,其实比较方便因为它自带许多内部文件库十分方便使用,如math类,hasset类,string类,时间类等等,使用十分方便。如时间类:

d. 在同事调用有参构造与无参构造函数时,出现覆盖问题,在构造了有参函数后,仍然要将无参构造函数写出,否则有参函数会覆盖无参函数,造报错,如下题:

import java.util.*;

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //调用无参构造方法,并通过setter方法进行设值
        String sid1 = sc.next();
        String name1 = sc.next();
        int age1 = sc.nextInt();
        String major1 = sc.next();
        Student student1 = new Student();
        student1.setSid(sid1);
        student1.setName(name1);
        student1.setAge(age1);
        student1.setMajor(major1);
        //调用有参构造方法
        String sid2 = sc.next();
        String name2 = sc.next();
        int age2 = sc.nextInt();
        String major2 = sc.next();
        Student student2 = new Student(sid2, name2, age2, major2);
        //对学生student1和学生student2进行输出
        student1.print();
        student2.print();
    }
}

/* 请在这里填写答案 */


class Student{
    private String sid;
    private String name;
    private int age;
    private String major;
     public Student(String sid2,String name2,int age2,String major2){
        sid = sid2;
        name = name2;
        age = age2;
        major = major2;
    }
    public Student(){};
    public void setSid(String sid1){
        this.sid = sid1;
    }
    public void setName(String name1){
        this.name = name1;
    }
    public void setAge(int age1){
        this.age = age1;
    }
    public void setMajor(String major1){
        this.major = major1;
    }
   
    public void print(){
        System.out.println("学号:"+sid+",姓名:"+name+",年龄:"+age+",专业:"+major);
    }
}

 



(4)主要困难以及改进建议:

a. 初写作业时,许多基础语法不会使用,致使写题较慢且思路不清,对于数组的使用,相关java自带文件库的利用等等都不熟悉,应先花较多时间去学习java的基础语法,了解java的各种语法及自带文件库的内容,可以更加熟练地运用便能轻松的写出代码。

b. 对于作业的练习不够,做的题目量太少,导致熟练度不够,在学习网课之余应去做一些课外知识的巩固练习题,加大训练量;

c. 自我认知出现问题,花费时间在java上不够,并且不够自觉去学习java,所以应提高自身自律性,主动花时间去学习java;

d. 注重自我反省,每次写完一道题目后应该及时反省题目中发现的错误,了解自身缺陷,然后及时弥补不足。

(5)总结:


对于此三次作业,我了解到自身对于java学习的许多缺陷,时间花费不足,基础语法学习不足,对于类与类之间的关系调用,类中属性,方法的使用编写有许多不足,但是通过此次作业我也学习了解了许多java知识,查漏补缺以及学习了许多知识要点;对于线上课程的学习需要花费更多的时间,主动去学去看,而线下课则希望老师对于题目的讲解能够更加细致,能多讲一些已经写过的题,因为这样有过记忆,实验课则希望老师能略微讲解一些实验中题目的要求及要点,稍微提醒。

 

 

 

 

标签:总结性,java,String,int,PTA,Blog,sc,new,public
From: https://www.cnblogs.com/xxyzdz/p/17279702.html

相关文章

  • 南昌航空大学BLOG-1 (软件学院-22206123)
    一、前言本学期开展了面向对象程序设计这门课程,目前,我们已经在PTA上完成了三次Java大作业。第一次大作业一共九题,第二次大作业一共四题,第三次大作业一共七题。第一次作业主要是让我们熟悉并掌握基本的Java语法,如输入、输出的运用,import关键字的使用等,同时复习顺序结构、选择结构......
  • PTA题目集1~3次总结
        当我第一次开始学习Java编程时,我感到非常兴奋和好奇。我知道Java是一门非常流行和强大的编程语言,广泛用于许多不同领域的应用程序开发。经过上学期学习c语言的经历,我在一开始自信满满。但是随后来自老师的命令几岁了我的幻想。在得知我们需要自学基本语法时,我开始通过......
  • java题目集1~3的总结性Blog
    一、前言经历前三次java题目集的话,应该也算是相对了解了java这门语言了,因为有了c语言的基础在里面,所以一部分基础的语法部分就理解来说的话不算是很困难,但从面向过程到面向对象的一个思想观念的改变让我有些不适应。如果把编写代码比作下棋的话,那么面向过程就是一步一步的下......
  • PTA题目集1-3总结
    PTA题目集1-3总结一、     前言不知不觉java已经学习了三个星期了,在学习的过程也收获了不少,由于有C语言的铺垫,语法变化不是很大,如递归,选择,循环,和C语言中的类似,使得在学习语法的过程中比较轻松。但是在更重要的是面向对象的加入,在解决问题的思路和方法上与C语言截然不同,使......
  • pta总结
    本三次题目知识点很多,运用了多种方法,需要我们掌握各种语法的作用,以及慢函数哦,设计对象啊!等等,很多很多Java语言是强类型语言,对于每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空间这也就要求我们软件工程师要不断地学习,在Java5以前,switch(expr)中,expr......
  • 装疯卖傻总结性blog
    前言1.    Scannerin=newScanner(System.in);Scanner是一个类,in是一个实例或者说是对象,new是一个创建对象的方法2.(float)(x/0.45359237)强制数据类型转换的写法3.String[]race=newString[]{"人类","精灵","兽人","暗精灵"};创建数组格式likethis,与c不一样要......
  • 题目集1~3的总结性Blog
    1、前言:前三次题目集主要涉及到java的编程基础知识和有关类的简单知识。(1)其中涉及了Java中的面向对象编程、控制语句、输入输出流、类和对象等基础知识点。具体包括类的定义、构造函数、成员变量和成员方法、访问权限修饰符、条件语句、循环语句、Scanner类的使用、System.out.p......
  • 钟7权BLOG1
    前言:总结三次作业的知识点,内容,难度。 显而易见,此三次的PTA作业所考察的知识点以及难度呈现不断变大的趋势。PTA1作业难度简单,虽然题目量是最多的,但却是最简单的,是我三个题目里面唯一一次全对的,PTA2比PTA1难度有较大的提升,知识点从PTA1的循环结构直接变成了数组和面向对象,当然里......
  • 第一次博客:PTA题目集1-3总结
    第一次博客:PTA题目集1-3总结前言:JAVA是一门非常好的语言,因其面向对象的思想,在解决问题时思路与上学期学习的C语言截然不同,但是其优势也是显然易见的,特别是在写大型程序时其面向对象的思想,可以让人思路清晰。 这次PTA中三个“菜单计价”的题目......
  • 迁移学习(CDA)《CDA:Contrastive-adversarial Domain Adaptation 》
    论文信息论文标题:CDA:Contrastive-adversarialDomainAdaptation论文作者:NishantYadav,M.Alam,AhmedK.Farahat,DipanjanGhosh,ChetanGupta,A.Ganguly论文来源:2023 ArXiv论文地址:download 论文代码:download视屏讲解:click1介绍基于域对齐的域适应方法实现了......