Javaアルゴリズム競技の入出力トピック
2020.2.23のアップデートでarrayモジュールが追加されました。
前書き
C/C++の使用からJavaの使用へ移行する過程で、大小様々な入出力問題に遭遇すると思います。それらを自分自身の学習材料としてまとめ、興味を持った友人と共有する予定です。
ファイル名の問題
コンテストに応募するコードでは、メインクラスは必ず
public class Main
を名前に、そして
はパッケージステートメントを持つことができません
を指定しないと、コンパイルエラーが発生します。
//publicを削除するか、クラス名にMainを使用しないとggになります、テスト済みですorz
基本的な入出力
コンテストを始めるにあたって、A+B問題ほど古典的な問題はないでしょう。最も基本的な入出力さえできなければ、学んだアルゴリズムをすべて使いこなすことはできない。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int a, b;
while (cin.hasNext()) {
a = cin.nextInt();
b = cin.nextInt();
System.out.println(a + b);
}
}
}
上記のコードは、最も基本的な入出力フレームワークを示しています。入力クラスである Scanner は java.util クラスパッケージに含まれており、最初にインポートする必要があります。
import java.util.*;
java入力では、あらかじめ作成された入力クラスオブジェクトが必要なので、一般的にはmain関数の最初の文でこのScannerクラスオブジェクトを作成し、そのオブジェクトはC/C++への愛と懐かしさの表現としてcinと名付けられています hhhh
トピックのデータ量が比較的多い場合は、2番目の初期化方法を選択すると、より効率的に実行することができます。
Scanner cin = new Scanner(System.in);
//or
Scanner cin = new Scanner(new BufferedInputStream(System.in));
タイトルに"input includes multiple sets of data up to the end of file"とあるので、C/C++形式から類推すると、以下のjavaコードがわかりやすいでしょう。
while (cin.hasNext()) //When there is still data in the input stream
{
a = cin.nextInt();
b = cin.nextInt();
}
1. 基本的なデータ型
これらの型は、C/C++で主に使われているもので、ぱっと見ただけで大体理解できる。
int n = cin.nextInt();//read in an integer
double d = cin.nextDouble();//read in a double precision floating point number
long l = cin.nextLong();//read in a long integer
ひとつだけ注意点があります。 Javaのmainメソッドはstatic型なので、staticキーワードでグローバル変数やメソッドを定義する必要があるんです!(笑)。
2. 配列
Javaは配列の作成に関してもC/C++と異なり、配列の作成は は、new キーワードを使用して作成し、そのための記憶領域を確保します。 が、あまり面倒ではありません。
int arr[] = new int[Size];
//or
int []arr = new int[Size];
2次元配列の初期化については、私が書いた別の記事を見てください。 Javaでの2次元配列の初期化
3.文字&文字列
Scanner クラスは、1 文字の char 型に対する読み取りメソッドを提供しません。 しかし、まずnext()メソッドを呼んで1文字だけ含む文字列を読み、charAt(0)を使ってインデックス0の文字を返せば、1文字読みができるようになるのです。
char ch = cin.next().charAt(0);
文字列については、すでにjavaでStringクラスがラップされていますし、char配列を使って文字列を格納することも可能です。
String str1 = next(); //equivalent to scanf("%s",str) in C/C++; or cin>>str;
String str2 = nextLine();//equivalent to get(str2);or getline(cin,str2) in C/C++;
char s1[] = cin.next().toCharArray();//call the toCharArray() method to convert it to an array of char types
char s2[] = cin.nextLine().toCharArray();//an analogous understanding
しかし C++のように、配列の添え字を使ってStringクラスのオブジェクトの特定の文字数に直接アクセスすることはできないことに注意してください。 通常、Stringクラスのオブジェクトの特定の文字数にアクセスするにはcharAt(int index)メソッドを使用するか、char型の配列を使ってStringクラスの他のメソッドを呼び出さずに文字列を格納することができます。
4. 出力
1日の基本的な出力内容です。
System.out.println(); //equivalent to cout<. in C++
System.out.print(); //equivalent to cout in C++<<"";
ファイルに出力します。
ファイルへの出力は、次のような場合に使用できます。
- javaのコンソールでも出力できないほどのデータ量であり、ファイルへの出力が必要な場合。
- ブルートフォース方式でテーブルを入力すると、フォーマットによってまずファイルへの入力が必要になる。
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(new File("E://result.txt")));
bw.write(str);//str means the contents of the written file
bw.flush();//immediately write the data in the buffer to the data stream
bw.close();//close the BufferedWriter stream
} catch (Exception e) {
e.printStackTrace();
}
File(文字列パス名)です。
file クラスの初期化に使用し、pathname はファイルへのパスを表します。
FileWriter(File file);
ファイル書き込みクラス FileWriter の初期化に使用し、file はファイルクラスオブジェクトを表します。
続きはこちら...
関連
-
この行に複数のマーカーがある - HttpServletResponseが型エラーに解決できない
-
Enumとの組み合わせでswitchの使い方を一度覚えるために必要な定数式
-
スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 4 at text.Division.main(Divisi
-
java 例外。Javaツールの初期化
-
java -serverコマンドで「Error: no `server' JVM at ... jvm.dll」を解決する方法です。
-
徹底的なJAVAアノテーション(Annotation):カスタムアノテーション
-
GDALを使用すると、Java Runtime Environmentのプログラムエラー処理方式で致命的なエラーが検出されました。
-
問題を自動的に選択して回答し、その時間を自動的に修正するスクリプト
-
VectorのJavaコレクションを徹底解析
-
Java入門-未報告例外 java.io.IOException; キャッチするか、スローされるように宣言する必要があります。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
undefinedeclipse エラー。この行に複数のアノテーションが見つかりました: - 文字列を型解決に解決できない
-
Spring BootのテストメソッドFailed to load ApplicationContextの問題を解決する
-
Javaエラーメッセージがenclosingクラスでない
-
Eclipse起動エラー:javaは起動したが、終了コード=1を返した(ネット上の様々な落とし穴)
-
このラインで複数のマーカーを解決する方法
-
Tomcat 8は、「少なくとも1つのJARがTLDをスキャンされたが、TLDが含まれていない」問題を解決します。
-
49のよくあるJavaのエラーとその回避方法!
-
Autowiredがエラーを報告
-
jackson パースエラー:com.fastxml.jackson.databind.exc.InvalidDefinitionException: インスタンスを構築できません
-
ターゲットランタイムのApache Tomcat v7.0が定義されていない解決策