AIZU ONLINE JUDGE の教材を使って勉強していきます
#AIZU ONLINE JUDGE とは
- AOJ(Aizu Online Judge:onlinejudge.u-aizu.ac.jp)は誰でも無料で利用できるプログラミング問題のオンライン採点システムです
- http://judge.u-aizu.ac.jp/onlinejudge/
- 開発者の渡部有隆さんによる機能・使いかた解説
https://book.mynavi.jp/manatee/series/detail/id=88273 - JavadではClass名をMainにしないと通らないので注意
オンラインジャッジとは、多くの演習問題にチャレンジすることができ、オンラインでコードを採点してくれるサービスです。各問題には、テストデータが準備されており、提出されたコードの正誤とその効率の判定を即座に行ってくれます
#入力を受け取る方法(Scanner)
-
nextLineメソッド:改行までの1行分の入力を取得
- 単語間のスペースを含む入力を読み取ります(\n行の終わりまで)
- 入力が読み込まれると、カーソルを次の行に移動
-
nextメソッド:スペースまで入力を読み込む
- 入力を読んだ後にカーソルを同じ行に置く
-
-
nextIntメソッド:スペースまでの入力をintとして取得
- エスケープシーケンス"\n"は読み取らない
-
nextIntメソッド:スペースまでの入力をintとして取得
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception {
Scanner scan = new Scanner(System.in);
// String str = scan.nextLine();
// System.out.println(str); //neko inu
String str1 = scan.next();
String str2 = scan.next();
System.out.println(str1); //neko
System.out.println(str2); //inu
scan.close();
}
}
##長方形の面積と周の長さ
たて a cm よこ b cm の長方形の面積と周の長さを求めるプログラムを作成して下さい。
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int a = scan.nextInt();
int b = scan.nextInt();
System.out.println( (a*b) + " " + (a*2+b*2) );
//System.out.printf("%d %d\n",a*b,2*(a+b));
}
}
##時計
秒単位の時間Sが与えられるので h: m :s の形式へ変換して出力してください。ここで、hは時間、mは60未満の分、sは60未満の秒とします。H、m、sを :(コロン)区切りで1行に出力してください。
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int sec, min, hour;
sec = sc.nextInt();
hour = sec / 3600;
min = (sec%3600) / 60;
sec = sec % 60;
System.out.println(hour+":"+min+":"+sec);
}
}
#条件演算子(三項演算子)
(条件式) ? 式A : 式B
- 条件式の値がtrueだった場合に式1を処理、falseだった場合に式2を処理
- AとBを比較するとき(式A:式B) 式A、Bは何らかの値を返す必要がある
public class Main {
public static void main(String[] args) throws Exception{
var age = 20;
System.out.println(age >= 20 ? "大人" : "子供"); //大人
}
}
##大小関係
2つの整数 a, b を読み込んで、a と b の大小関係を出力するプログラムを作成して下さい。
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
String result = (a == b) ? "a == b" : (a > b) ? "a > b" : "a < b";
System.out.println(result);
}
}
#配列操作
- Arraysクラス
- 配列は後からサイズ変更できない
- →copyOfメソッドでサイズの異なる配列に値を複製
- copyOf、copyOfRangeはシャローコピー
- シャローコピーは参照型の場合、コピー元が変わるとコピー先も変わってしまう
- →ディープコピー
var list2 = new StringBuilder[list1.length];
//Shallow copy
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
var array1 = new String[] { "dog", "cat", "mouse", "fox", "lion" };
//配列をソート
Arrays.sort(array1);
//配列を文字列化
System.out.println(Arrays.toString(array1)); //[cat, dog, fox, lion, mouse]
//ソート済の配列から値を検索
System.out.println(Arrays.binarySearch(array1, "mouse")); //4
var array2 = new String[] { "あ", "い", "う", "え", "お" };
//配列コピー、引数に長さ、不足分は0/nullで埋める
var array3 = Arrays.copyOf(array2, 2);
System.out.println(Arrays.toString(array3)); //[あ, い]
//配列を引数で範囲指定してコピー
var array4 = Arrays.copyOfRange(array2, 1, 7);
System.out.println(Arrays.toString(array4)); //[い, う, え, お, null, null]
//配列に値を設定
Arrays.fill(array4, 4, 6, "―");
System.out.println(Arrays.toString(array4)); //[い, う, え, お, ―, ―]
}
}
//Deep copy
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
var list1 = new StringBuilder[] {
new StringBuilder("ドレミファドーナツ"),
new StringBuilder("ARAMA"),
new StringBuilder("ハニホヘト")
};
var list2 = new StringBuilder[list1.length];
for (var i = 0; i < list1.length; i++) {
list2[i] = new StringBuilder(list1[i].toString());
}
list1[2].append("ハロー");
System.out.println(Arrays.toString(list1)); //[ドレミファドーナツ, ARAMA, ハニホヘトハロー]
System.out.println(Arrays.toString(list2)); //[ドレミファドーナツ, ARAMA, ハニホヘト]
}
}
##3つの数の整列
3つの整数を読み込み、それらを値が小さい順に並べて出力するプログラムを作成して下さい。
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num1 = scanner.nextInt();
int num2 = scanner.nextInt();
int num3 = scanner.nextInt();
int[] nums = {num1,num2,num3};
Arrays.sort(nums);
System.out.println(String.format("%s %s %s", nums[0],nums[1],nums[2])); //46 50 80
}
}