問題 B: C語言-成績排序
時間限制: 1 Sec 內存限制: 128 MB
提交: 1000 解決: 617
[提交] [狀態] [命題人:外部導入]
題目描述
現有有N個學生的數據記錄,每個記錄包括學號、姓名、三科成績。 編寫一個函數input,用來輸入一個學生的數據記錄。 編寫一個函數print,打印一個學生的數據記錄。 在主函數調用這兩個函數,讀取N條記錄輸入,再按要求輸出。 N<100
輸入
學生數量N佔一行 每個學生的學號、姓名、三科成績佔一行,空格分開。
輸出
每個學生的學號、姓名、三科成績佔一行,逗號分開。
樣例輸入 Copy
2 a100 zhblue 70 80 90 b200 newsclan 90 85 75
樣例輸出 Copy
a100,zhblue,70,80,90 b200,newsclan,90,85,75
關於這個循環使用,得多說幾句,你不在for循環前面加Stirng temp = scan.nextLine();時候,你會發現,接收次數總是會少一次,這個被“吞掉的”的次數去哪兒了呢?經仔細推敲發現,在第一次我們接受了一次int類型的整數,它把後面的那個回車當作一次輸入給接收掉,於是,我們的次數少了一次。
解法1:replace(char oldchar,char newchar);
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO 自動生成的方法存根
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
String temp = scan.nextLine();
//StringBuffer out = new StringBuffer();
for(int i=0;i<n;i++) {
String rec = scan.nextLine();
rec.trim();
String out = rec.replace(' ', ',');
System.out.println(out);
}
}
}
解法2:split正則匹配
我看網上很多解釋比較詳細,其實簡單來說,就是根據你方法的參數,把你的字符串分割成字符串數組。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO 自動生成的方法存根
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
String temp = scan.nextLine();
//StringBuffer out = new StringBuffer();
String[] rec = new String[101];
for(int i=0;i<n;i++) {
String trf = scan.nextLine();
rec=trf.split(" ");
for(int j = 0;j<rec.length-1;j++) {
System.out.print(rec[j]+",");
}
System.out.println(rec[rec.length-1]);
}
}
}
解法3:我最開始的解法,不怎麼推薦。
import java.util.Arrays;
import java.util.Scanner;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
String[] acc = new String[101];
//int cou = 0;
String c=scan.nextLine();
for(int i=0;i<n;i++){
acc[i]=scan.nextLine();
//System.out.println(acc[i]+" "+i);
//scan.next();
}
for(int j=0;j<n;j++){
for(int k=0;k<acc[j].length();k++){
if(acc[j].charAt(k)==' '){
//acc[j].replace(' ', ' ');
System.out.printf("%c", ',');
}else{
System.out.printf("%c", acc[j].charAt(k));
}
}
System.out.println();
}
}
}