pta两个设备登录同一个账号提交,后台会有显示吗,教师端会有显示吗
2条回答 默认 最新
关注
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<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) { } } 7.7 输入用例数据量太大,造成超时怎么办? 直接使用Scanner.next(System.in)相关方法读取用例速度较慢,碰到数据量较大的用例输入容易造成超时。 这时可尝试使用BufferedReader这种带缓冲区的输入并结合InputStreamReader,将极大提高读入速度。参考代码如下: BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String inStr = br.nextLine(); 不过要谨慎处理inStr,否则因为String的不可变性,有可能导致生成大量字符串对象,从而使得内存超出限制。 一般来说一行有多个值,如果使用inStr.split()虽可将多个值取出。但是速度和内存可能依然会超出题目限制。 可尝试结合使用StringTokenizer进行处理。详见如下参考文章。 Faster Input for Java 8. Java语法练习题集PTA分享码 Java语法练习题集-PTA分享码PTA中如何出Java题目? 文章更新记录 20210411更新 增加7.7 输入用例数据量太大,造成超时怎么办? 201708新版改版说明 PTA与2017年8月已升级成新版,域名改为https://pintia.cn/,官方建议使用Firefox与Chrome浏览器。 旧版 PTA 用户首次在新版系统登录时,请选择“旧版用户迁移”,输入旧版用户名、密码、以及自己可收到邮件的注册邮箱,通过邮件激活新版账户 。然后使用邮箱登录系统。注意1:无法收到激活邮件的,请到垃圾邮件中查找。注意2:有的账号提示激活失败,可能是已激活成功,他又来一次,就会有这提示,如果用邮箱不能登录,密码不对可能就密码少于8位,重置密码就行了。注意3:如果还是没有收到激活邮件,可以点击重新发送激活邮件,然后过一会到收件箱或者垃圾箱中查找。
解决 无用评论 打赏 举报
悬赏问题
- ¥20 gitlab 中文路径,无法下载
- ¥15 用动态规划算法均分纸牌
- ¥30 udp socket,bind 0.0.0.0 ,如何自动选取用户访问的服务器IP来回复数据
- ¥15 关于树的路径求解问题
- ¥15 yolo在训练时候出现File "D:\yolo\yolov5-7.0\train.py"line 638,in <module>
- ¥30 戴尔inspiron独显直连
- ¥15 进行一项代码设计遇到问题
- ¥15 Mutisim中关于74LS192N计数器芯片设计(计数器)
- ¥50 fastadmin后台无法删除文件
- ¥15 oracle查询Socket read timed out错误