《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
-
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 程序中包含多个类怎么提交?
-
7.7 输入用例数据量太大,造成超时怎么办?
-
8. Java语法练习题集PTA分享码
-
文章更新记录
-
20210411更新
-
201708新版改版说明
在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不是整型字符串。
根据需要也可将sc.hasNextInt()
改成sc.hasNext()
,可用来判断是否还有下一个输入标记(不管是不是int)。使用sc.next()
获取下一个输入标记(String型)。**注意:**尽量不要使用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 strList = new ArrayList();//Java 7中可以List 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
也复制进来。
总结
这个月马上就又要过去了,还在找工作的小伙伴要做好准备了,小编整理了大厂java程序员面试涉及到的绝大部分面试题及答案,希望能帮助到大家
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
-
提交的public class类名不为Main,比如,提交的类名如果是
public class Main1
就会出错。 -
提交的代码中有多个
public class
。注意:提交的代码中只能有一个public class
。 -
复制的时候将程序第一行
package
也复制进来。
总结
这个月马上就又要过去了,还在找工作的小伙伴要做好准备了,小编整理了大厂java程序员面试涉及到的绝大部分面试题及答案,希望能帮助到大家
[外链图片转存中…(img-P2dJKdPl-1714739045296)]
[外链图片转存中…(img-yMJre2N3-1714739045296)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!