題目:
思路:用一個二維數組存儲輸入的學号和座位号。
知識點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;
}
轉載于:https://www.cnblogs.com/littleLittleTiger/p/10354700.html