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. [转]谷歌Chrome浏览器开发者工具教程—基础功能篇

    来源:http://www.xiazaiba.com/jiaocheng/5557.html Chrome(F12开发者工具)是非常实用的开发辅助工具,对于前端开发者简直就是神器,但苦于开发者工具是英 ...

  2. Spring课程 Spring入门篇 4-9 Spring bean装配之对jsr支持的说明

    1 解析 1.1 疑问:2.2去掉@resource注解,为什么不能赋值?不是有set方法了吗? 1.2 @resource注解版本支持 1.3 没有显式指定@resource的那么,默认名称从何获得 ...

  3. for循环的几种比较

    对一个集合遍历的3种方法:1.for(int i=0;i<list.size();i++) 2.for(int i=0,len=list.size();i<len;i++) 3.for ( ...

  4. css浮动布局小技巧

    父元素如何围住浮动的子元素的三种办法: 一.为父元素应用overflow:hidden. overflow真正用途是防止包含元素被大的内容撑开,设定了宽度之后,包含元素将超过容器的内容减掉:而它还有另 ...

  5. js实现手风琴效果

    之前在慕课网上有练习手风琴效果,但是老师使用jquery简简单单的两三行实现了,今天自己用js练习一下效果 <div id="divbox"> <ul> & ...

  6. 菜鸟学习Spring——SpringMVC注解版解析不同格式的JSON串

    一.概述 不同格式的JSON串传到后台来实现功能这个是我们经常要做的一件事,本篇博客就给大家介绍四种不同的JSON串传到后台后台如何用@RequestBody解析这些不同格式的JSON串的. 二.代码 ...

  7. 如何禁用 Azure 虚拟机的日期时间同步

    问题描述 由于 Azure 虚拟机的特殊性,物理主机会实时同步虚拟机的时间和日期.当有特殊需求时,客户想要停止日期时间的同步,但是一些常见的关闭 NTP 服务等操作都会失败. 解决方案 Importa ...

  8. nginx反向代理与正向代理

    nginx反向代理与正向代理 1 正向代理 正向代理: 原因是 客户端 ---X--- 网站,客户端不能直接访问某个网站 解决: 客户端 ----> 代理服务器(发起访问请求) ----> ...

  9. 华为OJ-表示数字

    要求:将一个字符中所有出现的数字前后加上符号"*",其他字符保持不变 #include<iostream> #include<string> using n ...

  10. python下的selenium安装

    安装python 打开 Python官网,找到“Download”, 在其下拉菜单中选择自己的平台(Windows/Mac),一般的Linux平台已经自带的Python,所以不需要安装,通过打开“终端 ...