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

1. Main类与Scanner

1.1 Main类

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

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

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

1.2 输入与输出

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

  • 程序开头必须import java.util.Scanner以导入Scanner类。

  • 使用Scanner sc = new Scanner(System.in);生成scanner对象。
    该Scanner对象处理标准输入。所谓标准输入在你的电脑上就是你从键盘通过控制台进行的输入。
    字符串本身,也可被Scanner对象处理。可以使用如下代码处理字符串:
String str = "1 a 3.0";
Scanner sc = new Scanner(str);
//现在就可以通过sc来处理字符串str,比如将其中的每个字符取出来。

一个标准的示例程序如下:

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(); //用完后关闭扫描器是一个好的习惯
}
}

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

1 2

或者

1
2

Scanner均可处理。

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

本机上如何快速测试?

  • 打开记事本(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+"-"+str); //输出1-abc,即可以使用+拼接各个类型的变量,均转化为字符串

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

5.2 格式化输出:

代码: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个字符,右方填充空格。%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>();
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.常见问题!!!

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

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

2. 本机运行正确的代码放到PTA上提交显示答案错误或显示格式错误

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

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的常见使用。欢迎大家使用。

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循环外。
这个错误很有隐蔽性。学生自己在控制台一个一个输入的时候不会出错,但是如果将多行输入批量粘贴过来就无法得到正确结果

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

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

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

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

class Teacher{

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

8.Java语法练习题集PTA分享码

Java语法练习题集-PTA分享码
PTA中如何出Java题目?

转自https://www.cnblogs.com/zhrb/p/6347738.html?utm_source=itdadao&utm_medium=referral

PTA Java tips(转载)的更多相关文章

  1. 如何用javac 和java 编译运行整个Java工程 (转载)【转】在Linux下编译与执行Java程序

    如何用javac 和java 编译运行整个Java工程 (转载)  http://blog.csdn.net/huagong_adu/article/details/6929817 [转]在Linux ...

  2. Java Tips and Best practices to avoid NullPointerException

    A NullPointerException in Java application is best way to solve it and that is also key to write rob ...

  3. Java 正则表达式[转载]

    PS:转载自CSDN博客看上去很美 众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学 ...

  4. Java NIO 转载

    原文:http://www.iteye.com/magazines/132-Java-NIO  Java NIO 系列教程 2014-04-28  编辑 wangguo 评论(71条) 有204256 ...

  5. JMeter学习(十五)JMeter测试Java(转载)

    转载自 http://www.cnblogs.com/yangxia-test 目的:对Java程序进行测试 目录 一.核心步骤 二.实例 三.JMeter Java Sampler介绍 四.自带Ja ...

  6. Debian安装JAVA环境(转载)

    Debian官方没有维护专门的Java软件包,所以不能直接用apt-get工具来安装.在Debian系统中要安装Java,有两种方式,一种是用传统方式:一种是Debian方式. 1. 传统方式 在 s ...

  7. [Java学习笔记]Java Tips

    1.Java没有sizeof关键字 , volatile是java关键字.详情见:http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166. ...

  8. 详细分析Java中断机制-转载

    1. 引言 当我们点击某个杀毒软件的取消按钮来停止查杀病毒时,当我们在控制台敲入quit命令以结束某个后台服务时……都需要通过一个线程去取消另一个线程正在执行的任务.Java没有提供一种安全直接的方法 ...

  9. Java - Tips

    001 - Java中print.printf与println的区别? printf:格式化输出,用来控制输出的格式. print:标准输出,不换行. println:标准输出,换行.例如,print ...

随机推荐

  1. 继承Application管理生命周期

    继承Application实现Android数据共享 http://www.jianshu.com/p/75a5c24174b2 jessyan提出一个思路,用Application + 接口来管理扩 ...

  2. 1、Dubbo源码解析--Dubbo如何驱动Spring IOC容器并配合工作的?

    首先Spring要注入自己的bean需要在Spring-provider.xml(提供者spring注入文件,名字可能不一样)添加bean注入,其中有dubbo的自定义标签,xml如何识别这些标签?拿 ...

  3. js实现螺旋纹理特效

    效果如下       实现代码如下: <!doctype html> <html> <head> <meta charset="UTF-8" ...

  4. freebsd mount linprocfs

    mount用来做什么? to prepare and graft a special device or the remote node(rhost:path) on to the file syst ...

  5. 使用版本 1.0.0 的 Azure ARM SDK for Java 创建虚拟机时报错

    问题描述 我们可以通过使用 Azure ARM SDK 来管理 Azure 上的资源,因此我们也可以通过 SDK 来创建 ARM 类型的虚拟机,当我们使用 1.0.0 版本的 Azure SDK fo ...

  6. 收放卷winder计算器

    简单收放卷计算器v0.1

  7. SAP C4C里如何实现Sales Unit和Seller的自动determination

    先看一个效果,我录了一个视频,发布在视频网站上,大家可以先看看SAP Cloud for Customer里启用了partner 自动determination后的效果. 在SAP Cloud for ...

  8. python接口测试-项目实践(四)拼接出预期结果

    四 字符串拼接 空值处理 当某字段接口数据为空,则不显示相关字串. 比如字串原本是 "...,净资产收益率:ROE%",当接口数据中ROE为空,不显示',净资产收益率:%' 三目运 ...

  9. C语言 Printf函数

    #include <stdio.h> int main(int argc, const char * argv[]) { // insert code here... printf(&qu ...

  10. 2019年5月训练记录(更新ing)

    前言 \(ZJOI\)正式结束了. 但期中考试只考了年级\(216\),退役既视感... 于是就被抓回去补文化课了. 下半个学期可能要以文化课为主了吧! 但周三.周日应该还是会正常参加训练的,但其他时 ...