在PTA提交Java程序需要注意如下几个要点:

文章目录

  • 0. 不要包含package关键字
  • 1. Main类与Scanner
    • 1.1 Main类
    • 1.2 使用Scanner处理输入
  • 2.Scanner对象常用方法
  • 3.字符串与整型互相转换
  • 4.Scanner常见问题
  • 5.输出
    • 5.1 `System.out.println("abc")`打印字符串"abc"并回车换行。可使用`+`号连接各个类型的变量,组装成字符串。
    • 5.2 `System.out.print("abc")`打印字符串"abc",不打印回车换行。
    • 5.3 **格式化输出:**
  • 6.动态创建数组与ArrayList
  • 7.常见问题
    • 7.1 本机编译通过的Java程序,在PTA上提示编译错误或者直接无法运行
    • 7.2 本机运行正确的代码放到PTA上提交提示“答案错误”或”格式错误”。
    • 7.3 nextLine与其他next***混用的坑
    • 7.4 重复创建Scanner对象
    • 7.5 控制台如何跳出无限循环?
    • 7.6 程序中包含多个类怎么提交?

0. 不要包含package关键字

提交的代码中一定不要包含package关键字。

1. Main类与Scanner

1.1 Main类

你提交的所有程序都应该以如下形式出现

public class Main{public static void main(String[] args){//其他代码}
}

即,代码中必须存在一个public class Main。不允许出现其他的public class

1.2 使用Scanner处理输入

Java中使用Scanner处理输入。你需要注意如下几个地方

  • 程序开头必须import java.util.Scanner导入Scanner类。
  • 使用Scanner sc = new Scanner(System.in);生成scanner对象。
    该Scanner对象sc可以处理标准输入。所谓的标准输入,在你的电脑上就是你从键盘通过控制台进行的输入。注意:字符串本身,也可被Scanner对象处理,如下代码就可以处理字符串:
String str = "1 a 3.0";
Scanner sc = new Scanner(str);
//现在就可以通过sc来处理字符串str,比如将其中的每个字符取出来。
int x = sc.nextInt();    //将字符串中的1读出来,并转化为int型
String y = sc.next();   //将字符串中的a读出来,是String型
double z = sc.nextDouble();  //将字符串中的3.0读出来,并转化为double型

示例程序1:不断读入字符并转化为int然后相加,直到没有输入为止

import java.util.Scanner;//导入Scanner类public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);//生成Scanner对象while (sc.hasNextInt()) { int a = sc.nextInt(); //读下一个整型字符串int b = sc.nextInt();System.out.println(a + b);}sc.close(); //用完后关闭扫描器是一个好的习惯}
}

while (sc.hasNextInt())这个语句的含义是指,当标准输入的下一个标记是整型则继续处理,直到没有输入为止。
如果输入1 2 3 4 a,那么只能处理前面的1、2、3、4。在处理a时跳出,因为a不是整型字符串。
**注意:**尽量不要使用while(true)的方式来处理多次输入,否则在PTA系统中有可能出错。

示例程序2:不断读入字符(以行的方式读取),直到碰到end为止

public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);//生成Scanner对象String x = sc.nextLine();while (!x.equals("end")) { System.out.println(x);x  = sc.nextLine();}sc.close(); //用完后关闭扫描器是一个好的习惯}
}

示例程序3:读入n,然后循环读入n行数据

public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);//生成Scanner对象int n = sc.nextInt();for(int i = 0; i < n; i++){//接下来处理一行输入,比如一行的数据为"zhang 18"String name = sc.next();int age = sc.nextInt();//然后对name、age进行处理}sc.close(); //用完后关闭扫描器是一个好的习惯}
}

Scanner如何处理字符串中每个标记?
Scanner在处理字符串对象时,如果使用next函数,默认以空格、多个空格或者回车换行符作为分隔。比如上面这段程序,当我们输入为

1x 2y

或者

1x
2y

Scanner将输入分解成两个标记1x和2y。

本机上如何快速测试?

  • 打开记事本(Notepad)。
  • 复制输入样例中的数据到记事本。注:如果每行数据之间有不应该出现的空行,请先删除空行。
  • 全选复制(Ctrl+a, Ctrl+c)记事本的数据。注:为了将最后一行数据后面的回车换行也复制上。
  • 运行程序后,在控制台粘贴(Ctrl+v)。

2.Scanner对象常用方法

hasNext() //返回true或false,看有无下一个标记(字符串类型)。
比如对于a b c,现在处理到a,那么下一个标记就是b。
next() //返回类型为String(字符串),返回下一个标记。不会读取回车换行。
hasNextInt() //返回true或false,看有无下一个整型字符串标记。
nextInt() //返回类型int,将下一个整型字符串标记转化为int型返回。
nextBoolean() //返回类型为boolean,可以处理字符串true或者false,
nextDouble() //返回类型为double,可以处理字符串如1 2.3 -1.3等。
nextLine() //返回类型为String(字符串对象),返回一整行。会读取回车换行符。

3.字符串与整型互相转换

常用处理代码

String str = sc.nextLine();
int numStu = Integer.parseInt(str);
//也可使用如下代码
int num = sc.nextInt();  //字符串->整型
String x = num+"";       //整型->字符串,其中""为空字符串。任何基本类型数据与字符串+,都将转化为字符串。

也可以使用Double.parseDouble处理double类型数据,还有Long, Boolean等对象均有相似方法。

4.Scanner常见问题

该部分内容统一移到文章尾部的常见问题章节。

5.输出

5.1 System.out.println("abc")打印字符串"abc"并回车换行。可使用+号连接各个类型的变量,组装成字符串。

int x = 1;
String str = "abc";
System.out.println(x+2+"-"+str); //输出12-abc。即,可以使用+拼接各个类型的变量,转化为字符串

5.2 System.out.print("abc")打印字符串"abc",不打印回车换行。

5.3 格式化输出:

代码:System.out.printf("%d,%.3f,%5s,%b,80%%,end%n",123,3.141592654,"abcdef",true);
输出:123,3.142,abcdef,true,80%,end
说明:
%d,按十进制整数格式输出。%.3f,输出浮点数保留3位小数。
%-5s,按字符串格式输出,输出宽度为5。如果超过5个字符,则鸳鸯输出。如果为不足5个字符,右方填充空格。%5s,左方填充空格。
%b,按boolean型格式输出。
%%,输出%。
%n,输出行分隔符,如回车换行。
更多格式字符用法请查看API文档中Formatter类的格式字符串语法节。

6.动态创建数组与ArrayList

有的时候需要动态创建一个数组来存放输入的数据。

int n = sc.nextInt();
int[] arr = new int[n];//动态创建大小为n的数组
for(int i = 0; i < n; i++){arr[i] = sc.nextInt();
}

如果待输入的数据不确定,无法一开始就确定数组的大小。我们可以使用ArrayList代替数组。

List<String> strList = new ArrayList<String>();//Java 7中可以List<String> strList = new ArrayList<>();
while(sc.hasNextLine()){strList.add(sc.nextLine());
}//遍历输出列表中的内容
for (int i = 0; i < strList.size(); i++) {String str = strList.get(i);System.out.println(str);
}
//或者
for(String e: strList){System.out.println(e);
}

7.常见问题

7.1 本机编译通过的Java程序,在PTA上提示编译错误或者直接无法运行

  • 提交的public class类名不为Main,比如,提交的类名如果是public class Main1就会出错。
  • 提交的代码中有多个public class。注意:提交的代码中只能有一个public class
  • 复制的时候将程序第一行package也复制进来。
  • 提交的代码中出现中文。注意:提交的代码中任何时候都不要出现中文,注释也不要出现中文。
  • PTA上的Java暂时为Java 6,如果用Java7或8的语法可能会出错。最新版的PTA使用Open JDK 8,已经支持Java 8。估计还不支持Java 9,请不要用Java 9中的新语法。注意:中国大学mooc网的程序评测平台可能仅支持Java 6。

7.2 本机运行正确的代码放到PTA上提交提示“答案错误”或”格式错误”。

  • 确定使用前面提到的本机上如何快速测试的方法进行测试,请仔细比对样例输入与输出。
  • 你的代码输出确实有误。题库中的集美大学Java题集的题目已经经过上百次有效提交,一般不会有错,请仔细核对。**核对方法:**将样例输出放到屏幕左侧,你的程序输出放到右侧,逐行对比。
  • 显示格式错误,一般是因为你的输出最后一行少了回车换行,或者每行的行尾多了空格之类的错误。

7.3 nextLine与其他next***混用的坑

此坑非常坑。建议所有人仔细阅读。

for (int i = 0; i < 3; i++) {          int x = sc.nextInt();String str = sc.nextLine();System.out.println("x="+x+" str="+str);
}

当我们输入1并按回车的时候,就直接输出x=1 str=。可以看到sc.nextLine()并没有读取到任何东西。
实际上它读取了1后面的回车换行符。我们应将其改为sc.next()
结论:当题目要求中一会要输入数字、一会又要输入字符,一会又要整行读取。不要混合使用nextInt(),next(),nextLine()方法。不妨全部使用nextLine()整行读入后,再进行处理。
其他:对于这个问题,我在PTA题库中创建了1题jmu-Java-01入门-使用Scanner处理输入,格式化输出与String,主要用来考察Scanner处理输入、格式化输出、String的常见使用。欢迎大家使用。

7.4 重复创建Scanner对象

下面的代码中存在一个非常典型的错误!!!

for (int i = 0; i < 3; i++) { Scanner sc = new Scanner(System.in);//没有必要重复创建Scanner对象!运行时会导致结果不正确。int x = sc.nextInt();String str = sc.nextLine();System.out.println("x="+x+" str="+str);
}

应将Scanner sc = new Scanner(System.in);移到for循环外。
这个错误很有隐蔽性。学生自己在控制台一个一个输入的时候不会出错,但是如果将多行输入批量粘贴过来就无法得到正确结果

7.5 控制台如何跳出无限循环?

Ctrl+z或者强制终止程序。

7.6 程序中包含多个类怎么提交?

可以将多个类写入一个文件。但只有Main类使用public修饰。

class Teacher{}
public class Main{public static void main(String[] args) {}
}

【PTA】JAVA提交的一些注意点相关推荐

  1. 执行用时:10 ms, 在所有 Java 提交中击败了100.00% 的用户 内存消耗:39.6 MB, 在所有 Java 提交中击败了100.00% 的用户 zz-志 发布于 几秒前 0 解题思路

    执行用时:10 ms, 在所有 Java 提交中击败了100.00% 的用户 内存消耗:39.6 MB, 在所有 Java 提交中击败了100.00% 的用户 解题思路 数组存储不同车位数 代码 cl ...

  2. java提交按钮_java – 允许“Enter”键按提交按钮,而不是仅使用MouseClick

    我正在学习Swing类和一切.我有一个玩具程序,我一直在一起提示一个名字,然后提出一个JOptionPane消息"你输入(您的名字)". 我使用的提交按钮只能点击,但我想让它使用输 ...

  3. php post提交 java接收,asp如何接收php或java提交post过来的json数据

    传统的ASP与ASP之间post提交json可以用:json=cstr(request.form) 来获取得到的json代码,但实际上,如果是java或php提交过来的话,用request.form可 ...

  4. poj java 提交_POJ代码提交器 QNetworkAccessManager post get

    这两天闲着蛋疼,写了个代码POJ代码提交器,如图 代码记录下来吧,重在QNETWORKACCESSMANAGER的使用: #ifndef MYCODE_H #define MYCODE_H #incl ...

  5. PTA Java版 有重复的数据

    有重复的数据(java) 在一大堆数据中找出重复的是一件经常要做的事情.现在,我们要处理许多整数,在这些整数中,可能存在重复的数据. 你要写一个程序来做这件事情,读入数据,检查是否有重复的数据.如果有 ...

  6. Java启动sparksql,Java提交sparksql任务及问题分析

    SparkSession spark = SparkSession.builder() .enableHiveSupport() //这个必须加,是获取hivemetastore .getOrCrea ...

  7. 蓝桥杯-练一练「小邋遢的的衣橱」 java提交内部错误

    题目描述 小邋遢 MS.Jinlin 是个爱打扮的公主,他有很多晚礼服如 "LALA" "NIHAOMA" "WOBUHAO" " ...

  8. java 提交的内存_Java使用内存映射实现大文件的上传

    在处理大文件时,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频繁的读写操作,都将导致进程因频繁读写外存而降低速度.如 ...

  9. 蓝桥杯java提交格式_2019第十届蓝桥杯JAVA省赛B组

    B 不同子串 题目描述 一个字符串的非空子串是指字符串中长度至少为 1 的连续的一段字符组成 的串.例如,字符串aaab 有非空子串a, b, aa, ab, aaa, aab, aaab,一共 7 ...

最新文章

  1. OpenCV人脸识别LBPH算法源码分析
  2. iOS绘圆形图-CGContextAddArc各参数说明
  3. Round Numbers
  4. Java Dictionary get()方法与示例
  5. Python全栈开发之2、运算符与基本数据结构
  6. 记录——《C Primer Plus (第五版)》第十章编程练习第二题
  7. 桌面虚拟化之应用程序的整合
  8. 6.6使用环境变量配置外部环境
  9. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_01 File类_1_File类的概述
  10. Cocos2d-x开发---改变父节点颜色、透明度影响子节点
  11. 【2018CPCP-Final G:】Pastoral Life in Stardew Valley
  12. android获得手机目录,关于android手机文件目录的收集
  13. android 播放语音anr,Android语音合成出现ANR
  14. WORKGROUP无法访问,您可能没有权限使用网络资源,请与这台服务器的管理员联系以.......
  15. ISO/IEC JTC 1/SC 42人工智能分技术委员会第一次全会在京召开
  16. arcengine 加载地图不显示_Devexpress使用后arcengine地图加载不能全图显示
  17. [A002]微擎新版本今日头条小程序
  18. Linux常用指令之——grep用法
  19. QT---之Q_D和d指针概念2
  20. 我们偷窥了「1024」个大厂程序员的工位,发现了最适合的恋爱对象

热门文章

  1. 杭电1867 A + B for you again
  2. red hat enterprise 6.3 change to chinese
  3. Hlg 1407 【最小点权覆盖】.cpp
  4. STM32 RTC实时时钟
  5. RDA8955烧写程序摘要
  6. python正则表达式——regex模块
  7. R语言:ts() 时间序列的建立
  8. PKI/CA (5)X.509公钥证书
  9. controller-runtime 控制器实现
  10. 【Flask】创建一个蓝图