java:nextInt()和nextLine()一起使用出錯

来源:https://www.cnblogs.com/lzy321/archive/2019/02/13/10367884.html
-Advertisement-
Play Games

今天遇到一個很奇怪的事情,日常刷題中,遇到一個很簡單的題: (不想看我多逼逼只想知道為什麼會出錯看最後) 題目: 題目描述 description 題目描述 description 現有有N個學生的數據記錄,每個記錄包括學號、姓名、三科成績。 編寫一個函數input,用來輸入一個學生的數據記錄。 編 ...


今天遇到一個很奇怪的事情,日常刷題中,遇到一個很簡單的題:

(不想看我多逼逼只想知道為什麼會出錯看最後)

題目:

題目描述 description

現有有N個學生的數據記錄,每個記錄包括學號、姓名、三科成績。 編寫一個函數input,用來輸入一個學生的數據記錄。 編寫一個函數print,列印一個學生的數據記錄。 在主函數調用這兩個函數,讀取N條記錄輸入,再按要求輸出。 N<100

遇到這個題,對於用c語言的同學,構建結構體,加以順序表,輸入格式也有scanf函數控制輕鬆解決。

但是用java來做,就需要考慮,先將這一行數據轉化為獨立的數據,由於java裡面沒有類似scanf(“%d:::::%d”,&n,&m)這樣格式輸入的函數。

先將一行數據轉化為可以識別的單個數據:

 1 import java.util.Scanner;
 2 
 3 public class Test {
 4     public static void main(String[] args) {
 5         Scanner sc = new Scanner(System.in);
 6         String s = sc.nextLine();
 7         String ss[] = s.split(" ");
 8         for (String x : ss) {
 9             System.out.println(x);
10         }
11     }
12 }

然後我發現這樣連著使用in.nextInt()和in.nextLine()(和in.next()使用未發現問題

會出現以下情況:

這時我才發現第13行代碼沒有發生作用(如果是這樣輸入:1  a100 zhblue 70 80 90 在一行輸入情況又會正常

 

然後我百度發現:

跳到這個位置:

     問題分析:nextLine()會把nextInt(),next(),nextDouble(),nextFloat()的結束換行符作為字元串讀入,進而不需要從鍵盤輸入字元串nextLine便已經轉向了下一條語句執行。

      解決辦法 : 在每一個nextInt(),next(),nextDouble(),nextFloat()後都加一個nextLine()語句,將被next()去掉的Enter過濾掉。

比如圖下(在第10行添加了一句in.innextLine();

 

這道題的源碼:

 1 import java.util.ArrayList;
 2 import java.util.Scanner;
 3 
 4 public class Main {
 5     public static void main(String[] args) {
 6         Scanner in = new Scanner(System.in);
 7         int n=in.nextInt();
 8         in.nextLine();
 9         ArrayList<a> p=new ArrayList<a>();
10         for (int i=0;i<n;i++){
11             String pdd=in.nextLine();
12             String ss[]=pdd.split(" ");
13             a temp=new a(ss[0],ss[1],ss[2],ss[3],ss[4]);
14             p.add(temp);
15         }
16         for(a d:p){
17             System.out.println(d.n+","+d.name+","+d.a1+","+d.a2+","+d.a3);
18         }
19     }
20     static class a{
21         public a(String n, String name, String a1, String a2, String a3) {
22             this.n = n;
23             this.name = name;
24             this.a1 = a1;
25             this.a2 = a2;
26             this.a3 = a3;
27         }
28         String n;
29         String name;
30         String a1;
31         String a2;
32         String a3;
33     }
34 
35 }

但是還有一事:為什麼java中不弄一個格式化輸入,就像c中scanf(“%d:::::%d”,&n,&m)這樣,就不需要將一行數據轉成String數組了,希望有大佬能給我解答,或者有更好的辦法歡迎討論。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 即時通訊:支持好友,群組,發圖片、文件,消息聲音提醒,離線消息,保留聊天記錄 (即時聊天功能支持手機端,詳情下麵有截圖) 工作流模塊 1.模型管理 :web線上流程設計器、預覽流程xml、導出xml、部署流程 2.流程管理 :導入導出流程資源文件、查看流程圖、根據流程實例反射出流程模型、激活掛起 3 ...
  • 定義保證一個類僅有一個實例,並提供一個該實例的全局訪問點。 --《設計模式GoF》UML類圖使用場景當類只能有一個實例並且用戶可以從一個眾所周知的訪問點訪問它時。創建一個對象需要消耗過多的資源,比如IO和資料庫連接等。C#代碼實現1,初始版本namespace DesignPatternDemo.C... ...
  • RabbitMQ是一個開源的AMQP實現,伺服器端用Erlang語言編寫,支持多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用於在分散式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。 簡 ...
  • 思路 用$f[i]$表示完成第$i$棵子樹所需要得時間。 考慮如果有兩個子樹$a$和$b$,如果先去完成子樹$a$,那麼對於花費得時間就是$f[b] + siz[a] \times 2 + 1$ ...
  • 前言 2018年已經過去,新的一年工作已經開始,繼續總結和學習Java設計模式。 在上一篇中我們學習了行為型模式的解釋器模式(Interpreter Pattern)和迭代器模式(Iterator Pattern)。本篇則來學習下行為型模式的兩個模式,訪問者模式(Visitor Pattern)和中 ...
  • 一、什麼是SSL? SSL(Secure Sockets Layer 安全套接層),及其繼任者傳輸層安全(Transport Layer Security,TLS)是為網路通信提供安全及數據完整性的一種安全協議。TLS與SSL在傳輸層對網路連接進行加密。 SSL協議位於TCP/IP協議與各種應用層協 ...
  • 1. B站博人傳評論數據爬取簡介 今天想了半天不知道抓啥,去B站看跳舞的小姐姐,忽然看到了評論,那就抓取一下B站的評論數據,視頻動畫那麼多,也不知道抓取哪個,選了一個博人傳跟火影相關的,抓取看看。網址: 在這個網頁看到了18560條短評,數據量也不大,抓取看看,使用的還是scrapy。 2. B站博 ...
  • 題意 "題目鏈接" Sol 首先不難想到一種暴力dp,設$f[i][a][b][c]$表示還有$i$輪沒打,場上有$a$個1血,$b$個2血,$c$個三血 發現狀態數只有$s = 166$個,複雜度為$O(ns)$ 矩乘優化一下複雜度為$O(s^3 logn T)$,還是過不去。 因為每次詢問都是獨 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...