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

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) { }
}

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

Java语法练习题集-PTA分享码

PTA中如何出Java题目?


201708新版改版说明

  • PTA与2017年8月已升级成新版,域名改为https://pintia.cn/,官方建议使用Firefox与Chrome浏览器。
  • 旧版 PTA 用户首次在新版系统登录时,请选择“旧版用户迁移”,输入旧版用户名、密码、以及自己可收到邮件的注册邮箱,通过邮件激活新版账户 。然后使用邮箱登录系统。注意1:无法收到激活邮件的,请到垃圾邮件中查找。注意2:有的账号提示激活失败,可能是已激活成功,他又来一次,就会有这提示,如果用邮箱不能登录,密码不对可能就密码少于8位,重置密码就行了。注意3:如果还是没有收到激活邮件,可以点击重新发送激活邮件,然后过一会到收件箱或者垃圾箱中查找。

PTA中提交Java程序的一些套路的更多相关文章

  1. PTA中提交Python3程序的一些套路

    0. FAQ 0.1 提交后提示"答案错误"或者"格式错误" PTA检查答案正确与否是通过字符串匹配实现的.所以可能有以下几种原因: 格式错误:程序的输出要与题 ...

  2. 在dos中运行java程序,若出现Exception in thread “main" java.lang.NoClassDefFoundError

    在dos中运行java程序,若出现Exception in thread “main" java.lang.NoClassDefFoundError,可以检查一下几项: 环境变量配置: 注意 ...

  3. HTML文件中使用Java程序

    HTML文件中使用Java程序:简而言之,在HTML文件中引入java应用程序,并通过javascript调用其方法.   一. 运行环境 1.JAVA_HOME.CLASSPATH.PATH配置正确 ...

  4. Jar中的Java程序如何读取Jar包中的资源文件

    Jar中的Java程序如何读取Jar包中的资源文件 比如项目的组织结构如下(以idea中的项目为例): |-ProjectName |-.idea/  //这个目录是idea中项目的属性文件夹 |-s ...

  5. cmd 窗口中运行 Java 程序

    1.CMD 命令提示符(Command Processor)(CMD) CMD命令:开始->运行->键入 cmd(在命令行里可以看到系统版本.文件系统版本) 2.对文件夹操作的部分命令 启 ...

  6. Linux中部署JAVA程序

    JAVA程序在开发完成后,需要部署到服务器,如果是WEB项目,需要部署到WEB服务器,否则部署到应用服务器. JAVA是跨平台的编程语言,服务器的操作系统可以是Windows.Linux或者其它,下面 ...

  7. IntelliJ IDEA远程调试运行中的JAVA程序/项目

    一.IntelliJ IDEA配置 1.添加一个运行配置(remote项) 2.打开remote项配置对话框 3.远程jvm参数配置提示 4.远程调试的ip地址和端口号,ip就是java项目所在机器i ...

  8. JMX——以可视化形式管理与监控正在运行中的Java程序

    简单理解: MBean:管理的最小单元,一个MBean就是一个可以被监控的JavaBean. MBeanServer:一个池子,各个MBean都会注册到该池子中,并且该池子提供一系列的管理.监控API ...

  9. Python中调用Java程序包

    <原创不易,转载请标明出处:https://www.cnblogs.com/bandaobudaoweng/p/10785766.html> 开发Python程序,需求中需要用到Java代 ...

随机推荐

  1. 关于MDK下pack的定义方法

    我们使用数据流的过程中经常会用到结构体来进行解析,这个时候就需要使用字节对齐这个概念.不同的编译器的处理方法不一样. 这里小结一下MDK里面常用的几种方法: 1. 最常见的一种 使用#pragma p ...

  2. zabbix 3.2.7 (源码包)安装部署

    Zabbix 3.2.7 + CentOS7 安装 环境准备: 操作系统 CentOS Linux release 7.2.1511 (Core) zabbix server 10.30.94.60 ...

  3. .Net Core 2.0生态(3):ASP.NET Core 2.0 特性介绍和使用指南

    ASP.NET Core 2.0 发布日期:2017年8月14日 ASP.NET团队宣布ASP.NET Core 2.0正式发布,发布Visual Studio 2017 15.3支持ASP.NET ...

  4. 【leetcode】92. Reverse Linked List II

    Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1-> ...

  5. HTML-CSS相关(1)

    一  浮动 1.标准流中的块级盒子,宽度将会自动伸展为100%而浮动的块级盒子,宽度不会自动伸展,而是由内容撑开. 2.当一个盒子浮动,标准流中未浮动的其他盒子,将视浮动盒子不存在而占据浮动盒子原来的 ...

  6. vue.js语法

    Vue.js是当下很火的一个JavaScript MVVM(Model-View-ViewModel)库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更 ...

  7. git 生成公钥、私钥方法与clone使用方法

    我的配置流程 Git配置 Git安装完之后,需做git配置.打开git bash,分别执行以下两句命令 git config --global user.name "用户名" gi ...

  8. shell 多进程

    shell 多进程来模拟多线程 (1){ } 建立代码块 (2)使用 & 将进程放入后台 [zheng@localhost ~]$ cat threads.sh #!/bin/bash ;i& ...

  9. centos开放端口8080

    今天购买了云服务器,玩耍一下,配置好了jdk和tomcat后,发现访问不了8080端口,telnet 不通,由此想到了防火墙挡住了. 配置规则: iptables -I INPUT -p tcp -- ...

  10. MSF初体验 - kali linux 入侵XP系统

    最近做某安全竞赛平台的比赛,真正开始接触Metasploit这一渗透神器,同时也是装逼神器(2333-.),下面记录一下初步使用Metasploit的过程.首先在百度百科摘录了一段关于Metasplo ...