日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

ACM模式下输入输出写法 Java版本

發布時間:2023/12/20 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ACM模式下输入输出写法 Java版本 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 單個輸入與單行輸入

輸入一個數,或者一個字符串,或者一行數中間用空格隔開:

  • 輸入一個數
import java.util.Scanner; Scanner sc = new Scanner(System.in);int i = sc.nextInt();

byte/ double/ float/ int/ long/ short 類型的類似。

  • 輸入一個字符串
    next()、nextLine()都可以:
    不過要注意 
    next()不會吸取字符前/后的空格/Tab鍵,只吸取字符,開始吸取字符(字符前后不算)直到遇到空格/Tab鍵/回車截止吸取;
    nextLine()吸取字符前后的空格/Tab鍵,回車鍵截止。
String str1 = sc.next(); //接收第1個值 String str2 = sc.nextLine(); //接收的是一整行

對于相同的輸入: asdad sad ka
str1:asdad
str2: asdad sad ka

  • 輸入一個char類型字符
    Scanner本身并不支持獲取char類型的數據,但是可以通過charAt()方法截取string的首位來獲取char類型的數據。
char c = scanner.next().charAt(0);
  • 輸入一行數據or字符串,中間用空格隔開
    對于不同數據類型的方法都類似,連續用幾次next()或者nextInt()函數:
String a = sc.next();// 接收第1個值String b = sc.next();// 接收第2個值String c = sc.next();// 接收第3個值

輸入:anny tony bani
輸出:a:anny b:tony c:bani

2. 多行輸入(最常見)

  • 給出了矩陣的行列數,用for遍歷

第一行是兩個用空格隔開的正整數n與m,n為行數,m為列數。
接下來的n行,每行是m個用空格隔開的正整數。如:
2 3
5 6 8
1 6 9
想要用二維數組接收:

//用二維數組接收: int m = sc.nextInt(); int n = sc.nextInt(); int[][] nums = new int[m][n]; for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {nums[i][j] = sc.nextInt();} }//驗證接收是否正確: for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {System.out.print(nums[i][j] + " "); //分隔號一定要用雙引號隔開}System.out.println(); }

注意在驗證的時候,分隔號一定要用雙引號隔開,單引號字符會參與計算!!

  • 沒有給出具體的行列數,用hasNextLine()判斷

有些輸入可能是:
輸入一個矩陣,每行以空格分隔。
1 2 3
56 8 2 9
對于這種沒有給定矩陣行列數的輸入,我們只能按照字符串拆分來進行。

public class test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);List<List<Integer>> list = new ArrayList<>();while (sc.hasNextLine()) { //每行都是一個List數組List<Integer> line = new ArrayList<>();String str = sc.nextLine();String[] arr = str.split(" ");for (String s : arr) {line.add(Integer.valueOf(s));}list.add(line);}System.out.println(list); //[[1, 2, 3], [56, 8, 2, 9]]} }
  • 輸入數組中帶有中括號和逗號

有些輸入可能是,輸入一個矩陣:
[[3,2,3],
[1,6,5],
[7,8,9]]
對于這種沒有給定矩陣行列數的輸入,而且還包含中括號和逗號的輸入,我們也是只能按照字符串拆分來進行。這里逗號和右中括號是關鍵。

import java.util.ArrayList; import java.util.List; import java.util.Scanner;public class test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);List<List<Integer>> list = new ArrayList<>();while (sc.hasNextLine()) { //每行都是一個List數組List<Integer> line = new ArrayList<>();String str = sc.nextLine();String[] arr = str.replace("[","").replace("]","").replace("],","").replace(" ","").split(","); //只要改這里就可以,加幾個replace()for (String s : arr) {line.add(Integer.valueOf(s));}list.add(line);}System.out.println(list); //[[3, 2, 3], [1, 6, 5], [7, 8, 9]]} }

3. 解析逗號分隔符的字符串

輸入用逗號分隔的字符串: 1,5,9,6,5,7,2
想要接收后變成int類型數組:

String str = sc.next(); String[] arr = str.split(","); //通過分隔符將其轉為字符串數組 int[] nums = new int[arr.length]; for (int i = 0; i < nums.length; i++) {nums[i] = Integer.parseInt(arr[i]); //將字符串轉為int }

這里提一下parseInt()與valueOf()的區別:
Integer.parseInt(str)返回值是int型的;
Integer.valueOf(str)返回值是Integer型的。

4. 輸出寫法

System.out.println();//換行打印,輸出之后會自動換行 System.out.print();//不換行打印 System.out.printf();//按格式輸出

對于printf:

/*** 輸出字符串 ***/ // %s表示輸出字符串,也就是將后面的字符串替換模式中的%s System.out.printf("%s", new Integer(1212)); // %n表示換行 System.out.printf("%s%n", "end line"); // 還可以支持多個參數 System.out.printf("%s = %s%n", "Name", "Zhangsan"); // %S將字符串以大寫形式輸出 System.out.printf("%S = %s%n", "Name", "Zhangsan");/*** 輸出整數類型***/ Integer iObj = 342; // %d表示將整數格式化為10進制整數 System.out.printf("%d; %d; %d%n", -500, 2343L, iObj); // %o表示將整數格式化為8進制整數 System.out.printf("%o; %o; %o%n", -500, 2343L, iObj); // %x表示將整數格式化為16進制整數 System.out.printf("%x; %x; %x%n", -500, 2343L, iObj); // %X表示將整數格式化為16進制整數,并且字母變成大寫形式 System.out.printf("%X; %X; %X%n", -500, 2343L, iObj);/*** 輸出浮點類型***/ Double dObj = 45.6d; // %f表示以十進制格式化輸出浮點數 System.out.printf("%f; %f; %f%n", -756.403f, 7464.232641d, dObj); // 還可以限制小數點后的位數 System.out.printf("%.1f; %.3f; %f%n", -756.403f, 7464.232641d, dObj);

5. 注意點

  • 多組測試數據:
    如果出現多組測試數據放在一起的情況,直接在最外層套while(sc.hasNext()),每組測試數據進入一次while循環,運行一次主函數。一直等待輸入,除非終止程序。
  • 高精度:
    BigInteger和BigDecimal可以說是acmer選擇java的首要原因。
    函數:add, subtract, divide, mod, compareTo等,其中加減乘除模都要求是BigInteger(BigDecimal)和BigInteger(BigDecimal)之間的運算,所以需要把int(double)類型轉換為BigInteger(BigDecimal),用函數BigInteger.valueOf()。
  • 一個非常容易出錯的地方:(nextInt轉nextLine接收)

假設輸入為:
3
a 10 1 2
b 10 2
c 10 3
第一行是是數字n,表示下面有n行輸入,下面的n行有字母,也有數字,字母只是標識符,不參與運算,數字的個數不固定,每一行的數字需要用List存儲下來,最后將每一行的List放入一個大的List中。

錯誤代碼:

import java.util.Scanner; public class Main{public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt(); //需要在后面添加sc.nextLine();換到下一行List<List<Integer>> adj = new ArrayList<>();for (int i = 0; i < n; i++) {List<Integer> list = new ArrayList<>();String[] inputs = sc.nextLine().split(" ");for (int j = 1; j < inputs.length; j++) {list.add(Integer.valueOf(inputs[j]));}adj.add(list);}} }

后果:adj的第一個元素是一個空ArrayList,輸入的最后一組數據沒有接收到。
原因:當執行int n = sc.nextInt();后,光標還停留在第一行,下面就直接執行sc.nextLine()來接收輸入了,這樣接收的只是第一行n后面的空字符串!
解決方法:在int n = sc.nextInt();后添加sc.nextLine();直接換行

  • 賽碼平臺注意點:
    不要自定義包名稱,否則會報錯,即不要添加package answer之類的語句;
    寫很多個類,但是必須有一個類名為Main,并且為public屬性,并且Main為唯一的public class;
    Main類的里面必須包含一個名字為’main’的靜態方法(函數),這個方法是程序的入口。

總結

以上是生活随笔為你收集整理的ACM模式下输入输出写法 Java版本的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。