题目:
思路:用一个二维数组存储输入的学号和座位号。
知识点for me:
1、不要在程序中混合使用nextInt(),next(),nextLine()。如果要使用nextLine()的话就全部使用nextLine()
整行读入后,再进行处理。最开始我先用了nextInt()又用了nextLine(),发现nextLine()比我希望的少读了一行,可能是把第一行的换行符当作第一行了?
2、以空格分隔字符串的方法:String [] arr2 = str.split(" ");
但是如果待分隔的字符串像这样“a b c d“包含制表符、单个空格、多个空格时,可以这么做:String [] arr = str.split("\\s+");
String的split方法支持正则表达式,而正则表达式\s
表示匹配任何空白字符,+
表示匹配一次或多次。
上代码:
import java.io.*; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int sum=Integer.parseInt(sc.nextLine()); String [][]arr=new String[sum][3]; String s; int i,j; for(i=0;i<sum;i++) { s=sc.nextLine(); arr[i]=s.split(" "); } String get=sc.nextLine(); int g=Integer.parseInt(get.trim()); String a=sc.nextLine(); String arr2[]=new String[g]; arr2=a.split(" "); for(i=0;i<g;i++) { for(j=0;j<sum;j++) { if(arr[j][1].equals(String.valueOf(arr2[i]))) { System.out.println(arr[j][0]+" "+arr[j][2]); break; } } } } }
但是,测试结果竟然是部分正确。
看样子代码还得优化,看了看人家做的很多都是用的C语言的结构体,Java没有结构体,或许可以用类来实现吧?这题不太想做了,以后有空再来管它吧。
————————————————————————————————————————————————————————————————————————————————————————
我带着俩小时学的C++皮毛回来管它了!C++用结构体解决挺简单的,写起来快,也能全部通过。
上代码:
#include <iostream> using namespace std; struct stu{ string s; int a,b; }; int main() { stu arr[1010]; int n; cin>>n; for(int i=0;i<n;i++) { cin>>arr[i].s>>arr[i].a>>arr[i].b; } int m,x; cin>>m; for(int i=0;i<m;i++) { cin>>x; for(int j=0;j<n;j++) { if(arr[j].a==x) { cout<<arr[j].s<<" "<<arr[j].b<<endl; break; } } } return 0; }