2022年05月17日

JAVA 多次元配列のイメージ

2次元以上の配列のことを多次元配列と呼ぶ。
2次元配列は、既に配列(※)されているものを、さらにまとめた(配列した)もの。

※配列:データをメモリ上に隙間をあけずに並べたもの


Image_of_multidimensional_array.jpg



添字と値を確認するサンプルプログラム

public class MultidimensionalArrays{
 public static void main(String[] args){

  int[][] array = {{12,23,34}, {45,56,67}, {78,89,90}};

  for (int i = 0; i < array.length; i++){
   for (int j = 0; j < array[i].length; j++){
    System.out.println("array[" + i + "][" + j + "] = " + array[i][j]);
   }
  }

 }
}

2021年01月04日

JAVA equalsメソッド注意点

equalsメソッドを利用する際に比較対象の前後を気にしないで書いてしまうと、  NullPointerException が発生する可能性がある。

例外を避けるためには、Nullとならない比較対象の文字列を初め(先)に書いておく。


【Ex.】
A.equals(X) の場合
  ・Aがnullの場合は NullPointerException が発生する
  ・AがnullではなくXがnullの場合は false を返す

2019年01月25日

JAVA scannerクラスのnextInt()を利用した際、無限ループに陥ってしまう

scannerクラスのnextInt()を利用し、キーボードから数値を入力させる。
このとき、数値以外の文字が入力されると、プログラムの書き方によっては無限ループに陥ってしまう。

【Ex.】 数値を3つ入力させる。数値以外の文字が入力された場合は再度入力を促す。
 public static void main(String[] args) {
  int input[] = new int[3];
  Scanner scan = new Scanner(System.in);

  System.out.println("数字を入力してください");
  for(int n = 0;n < 3;n++){
   System.out.print((n + 1) + "個目 :");
   try{
    input[n] = scan.nextInt();
   }
   catch(InputMismatchException e){
    System.out.println("数字を入力してください");
    System.out.println("もう一度入力してください");
    n--;
   }
  }
 }


上記プログラムは、一見問題なく動くように見えるが、文字が入力されると無限ループに陥ってしまう。
これは、スキャナが InputMismatchException をスローすると、例外の原因となったトークンを読み飛ばさないため。

つまり、文字が入力され例外が発生した場合、
通常は(readLine()などでは)エラーになった文字は捨ててしまうが(読み飛ばしてしまうが)、
nextInt()はそれを読み飛ばさないため、永遠にエラー文字を読み取り続け無限ループに陥ってしまう。

この場合、オブジェクトを初期化し「前回のエラー文字を持っていない」新しいオブジェクトで呼び出すようにすることで解消される。
 public static void main(String[] args) {
  int input[] = new int[3];

  System.out.println("数字を入力してください");
  for(int n = 0;n < 3;n++){
   System.out.print((n + 1) + "個目 :");
   try{
    Scanner scan = new Scanner(System.in);
    input[n] = scan.nextInt();
   }
   catch(InputMismatchException e){
    System.out.println("数字を入力してください");
    System.out.println("もう一度入力してください");
    n--;
   }
  }
 }

2019年01月18日

JAVA ループ内でリストの要素を削除する

forループ内で該当する値を削除する(removeする)と下記が発生する。
(リストを削除しつつlistの要素をgetしょうとすると下記が発生する。)
  「java.util.ConcurrentModificationException」

この場合、for文ではなくwhile文を利用する。

【Ex.】 valueの要素値が2の場合、その要素を削除する。
public static void main(String[] args) {
 int ransu = 99;
 ArrayList<Integer> value = new ArrayList<Integer>();
 while(0 != ransu){
  ransu = (int)(Math.random()*11);
  System.out.println("0〜10の値を出力:" + ransu);
  value.add(ransu);
 }
↑ まずは、0から10までの乱数を取得(※0が出たら乱数取得を終了)

■list.remove(Object o)メソッドを使う場合
 while(value.remove((Integer)2)){}

■iterator(イテレータ)を使う場合
 Iterator itr = value.iterator();
 while(itr.hasNext()){
  Integer i = (Integer)itr.next();
  if(2 == i){
   itr.remove();
  }


※その他、後でまとめてremoveAllする方法でもよい。
その買うを、もっとハッピーに。|ハピタス
\ハピタスの紹介キャンペーンです/
最大2000ポイントが貰えます
⇒登録後に行う「ハピタス検定」の答えはこちら

※ハピタスをご存じないかたは他で検索してみてください

ブログ内を検索
ファン
カテゴリ
よく倒されますが、へこたれながら起き上がるSEの備忘録です

Windows(20)
SQL(8)
JAVA(4)
VBScript(13)
VBA(13)
Other(13)
書籍(1)
記事ランキング
  1. 1. no img 確率の収束に必要な試行回数
  2. 2. no img VBScript マウスポインタを自動的に移動させクリックするスクリプト
  3. 3. no img Windows ディスク使用率100%を改善させる
  4. 4. no img Eclipse ホットコード置換に失敗しました
  5. 5. VBScript タスクスケジューラのメッセージを最前面に表示するスクリプト
広告

クラウド型レンタルサーバー サイト運用しない方には不要です‥

ドメイン名取得サービス 超人気ドメイン「.com」「.net」
国内最安値1円です!!

Amazon.co.jpで購入する
画像をクリックするとAmazonのサイトにジャンプします