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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

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

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

1. 單個(gè)輸入與單行輸入

輸入一個(gè)數(shù),或者一個(gè)字符串,或者一行數(shù)中間用空格隔開:

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

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

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

對(duì)于相同的輸入: asdad sad ka
str1:asdad
str2: asdad sad ka

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

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

2. 多行輸入(最常見)

  • 給出了矩陣的行列數(shù),用for遍歷

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

//用二維數(shù)組接收: 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();} }//驗(yàn)證接收是否正確: for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {System.out.print(nums[i][j] + " "); //分隔號(hào)一定要用雙引號(hào)隔開}System.out.println(); }

注意在驗(yàn)證的時(shí)候,分隔號(hào)一定要用雙引號(hào)隔開,單引號(hào)字符會(huì)參與計(jì)算!!

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

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

public class test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);List<List<Integer>> list = new ArrayList<>();while (sc.hasNextLine()) { //每行都是一個(gè)List數(shù)組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]]} }
  • 輸入數(shù)組中帶有中括號(hào)和逗號(hào)

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

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()) { //每行都是一個(gè)List數(shù)組List<Integer> line = new ArrayList<>();String str = sc.nextLine();String[] arr = str.replace("[","").replace("]","").replace("],","").replace(" ","").split(","); //只要改這里就可以,加幾個(gè)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. 解析逗號(hào)分隔符的字符串

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

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

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

4. 輸出寫法

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

對(duì)于printf:

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

5. 注意點(diǎn)

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

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

錯(cuò)誤代碼:

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的第一個(gè)元素是一個(gè)空ArrayList,輸入的最后一組數(shù)據(jù)沒有接收到。
原因:當(dāng)執(zhí)行int n = sc.nextInt();后,光標(biāo)還停留在第一行,下面就直接執(zhí)行sc.nextLine()來接收輸入了,這樣接收的只是第一行n后面的空字符串!
解決方法:在int n = sc.nextInt();后添加sc.nextLine();直接換行

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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。