if文内の二次元配列の設定方法について

このQ&Aのポイント
  • if文内で二次元配列の内容を設定する方法について質問しています。
  • 統合前の二つのクラスを統合し、区分によって二次元配列の内容を設定したいと考えています。
  • 統合案1ではNullエラーが発生し、統合案2ではコンパイルエラーが発生してしまいます。どのようにすればよいか教えてください。
回答を見る
  • ベストアンサー

if文内の二次元配列の設定方法について

if文内の二次元配列の設定方法について 区分の内容によって2つのクラスを呼び分けていたのですが、今回そのクラスを統合しようとしています。 そこで、2つのjavaソースを統合するにあたり、ソース内で使用している二次元配列の内容を区分によって書き換えたいのですが、 if文内に記述するため、その変数の有効範囲がif文内だけになってしまいます。 クラス全体でその配列を参照できるようにするにはどのように記述すればよいのでしょうか? <統合前> Test1.java public class Test1 { private static final String[][] LST = {{3,0,0},{0,0,1},{0,0,1}}; public void initialize() { System.out.println(LST[0][0]); } ⇒【実行結果】3 Test2.java public class Test2 { private static final String[][] LST = {{2,0,0},{0,0,1},{0,0,2},{0,0,3}}; public void initialize() { System.out.println(LST[0][0]); } ⇒【実行結果】2 上記2つのファイルを統合し、区分によって二次元配列の内容を設定する。 <統合案1> Test1.java public class Test2 { private String[][] LST; public void initialize() { if (kubun == 1) { String[][] LST = {{3,0,0},{0,0,1},{0,0,1}}; }else{ String[][] LST = {{2,0,0},{0,0,1},{0,0,2},{0,0,3}}; } System.out.println(LST[0][0]); } ⇒【実行結果】NullExceptionが発生してしまいます。 <統合案2> public class Test2 { private String[][] LST; public void initialize() { if (kubun == 1) { LST = {{3,0,0},{0,0,1},{0,0,1}}; }else{ LST = {{2,0,0},{0,0,1},{0,0,2},{0,0,3}}; } System.out.println(LST[0][0]); } ⇒【実行結果】コンパイルエラーが発生してしまいます。(式の開始が不正です。) ※kubunが1のときと、それ以外のときで作成される二次元配列の要素数は異なります。 ※kubunの内容によって、一度二次元配列の内容を設定してしまえば、あとは同じ内容のままです。 最初の変数の宣言の仕方、二次元配列の内容設定の仕方等、 どのようにすればよいかご教授よろしくお願い致します。

  • Java
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

LSTの型はString[][]で合ってますか? とりあえずint[][]として考えると、<統合案2>を書き換えて if (kubun == 1) { LST = new int[][] {{3,0,0},{0,0,1},{0,0,1}}; }else{ LST = new int[][] {{2,0,0},{0,0,1},{0,0,2},{0,0,3}}; } でいいはずです。

nana_y
質問者

お礼

作成しようとしているのはString型なのですが、配列の設定内容が複雑だったため、質問のソースには数字で書いてしまいました。 混乱を招いてしまいまして申し訳ありませんでした。 ご回答頂いた方法でできそうです。 ありがとうございました!!

関連するQ&A

  • 参照型の2次元配列の作り方

    参照型の2次元配列の作り方 実行結果は、 赤レッド 黄イエロー 青ブルー と画面表示されるようにしたいのです。 class Sample{ public static void main(String[]args){ String[][] str ={{      ?     }}; System.out.println(     ?     ); } } ?のところをどう書いたらよいか御指導御願い致します。

    • ベストアンサー
    • Java
  • 多次元配列のソートがうまくいかない

    多次元配列のソートがうまくいかない 質問失礼します. 以下のような,String型,int型,double型の混在した多次元配列([3][3]の配列)をソートするプログラムを作成しました. このプログラムでは3番目の項目でソートを行っています. 問題点なのですが, 3番目の項目がdouble型の一桁(例えばarray[1][2]が2.0)ならばうまくソートできるのですが, 一つを2桁(例えばarray[1][2]を10.0)にすると何故か先頭の数(10.0の場合1)を基準にソートされてしまっているようです・・・ 配列へのデータの入れ方が間違っているのでしょうか? 原因がはっきりわからず困っているのですが, わかる方いましたらよろしくお願いします. public class Sort_test { /** * @param args */ public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ String[][] array = new String[3][3]; array[ 0 ][ 0 ] = "A"; array[ 0 ][ 1 ] = 2001+""; array[ 0 ][ 2 ] = 9.0+""; array[ 1 ][ 0 ] = "B"; array[ 1 ][ 1 ] = 1001+""; array[ 1 ][ 2 ] = 2.0+""; array[ 2 ][ 0 ] = "C"; array[ 2 ][ 1 ] = 3001+""; array[ 2 ][ 2 ] = 6.0+""; TheComparator comparator = new TheComparator(); // 3番目の項目でソートするように設定 comparator.setIndex( 2 ); // ソート実施 Arrays.sort( array, comparator ); dump(array); } public static void dump( String[][] array ) { for ( int i = 0;i < array.length;i++ ) { for ( int j = 0; j < array[ i ].length;j++ ) { System.out.print( "\t" + array[ i ][ j ] ); } System.out.println(); } } } //多次元配列ソート用クラス class TheComparator implements Comparator { /** ソート対象のカラムの位置 */ private int index = 0; /** ソートするためのカラム位置をセット */ public void setIndex( int index ) { this.index = index; } public int compare( Object a, Object b ) { String[] strA = ( String[] ) a; String[] strB = ( String[] ) b; return ( strA[ index ].compareTo( strB[ index ] ) ); } }

    • ベストアンサー
    • Java
  • jspでの二次元配列

    こんにちは。初めて質問させていただきます。よろしくお願いします。 現在javaで作ったプログラムをjspでも使えるようにしようと考えているのですが、 二次元配列がうまくjspで反映されず困っています。 jspに関してはほとんど無知で一から勉強している次第です。 そのためなるべく簡単に、と思い 以下のプログラムを、<% %>の間に入れるだけで動かせないかと思ったのですが エラーが出てしまいました。一次元の配列ならばできたのですが... ちなみに以下のプログラムはcsvファイルを読み込み、 多次元配列に格納していくというものです。 稚拙なプログラムで申し訳ありません... どなたかご教授いただければ幸いです。 import java.io.*; import java.util.StringTokenizer; import java.util.ArrayList; class Dog{  public static void main(String args[]) throws IOException{      String csv = "dognum.csv";      BufferedReader br = new BufferedReader(new FileReader(csv)); String[][] array = new String[100][]; int i = 0; while (true) { String line = br.readLine(); if(line==null) break; array[i] = line.split(","); i++; } for (i = 0; i < 101; i++) { for (int j = 0; j < array[i].length; j++) { System.out.println("["+i+"]["+j+"] = " + array[i][j]); } } } }

  • C#で、引数における一次元と二次元配列の取り扱い

    C#について質問させていただきます。 以下のようにすればそれぞれ一次元配列と二次元配列を格納出来ますが 同時に一つの引数に収めることは無理なのでしょうか?    public static void Join(string[] Ary_str){ 本文 }    public static void Join(string[ , ] Ary_str){ 本文 } そのために、例えば以下のようにしたとします。    public static void Join(object Ary_obj){ 本文 } こうすれば一次元でも二次元でも格納出来ますが 格納された値が何次元配列なのか確認するために    Ary_obj.Rank としてもエラーになってしまいます。 (1)Objectに格納した値が何次元配列なのか確認する方法か (2)一次元でも二次元でも格納できる引数の指定方法 をご存じの方、ぜひお教え願います。><

  • 二次元配列について

    csvファイルを読み込み 、(コンマ)毎に区切り出力するプログラムを今作っています。 そこで最初に import java.io.*; import java.util.*; public class aaa { public static void main(String aaa[]) throws Exception{ Scanner yomi = new Scanner( new File("C:\\addorres.csv") ); yomi.useDelimiter( "," ); List<String> adorr = new ArrayList<String>(); while( yomi.hasNext() ){ adorr.add( yomi.next() ); } for( String s: adorr ){ System.out.println( s ); } } } と打ちましたそうすると csvに 名前、住所、電話、アドレス、ID、PW 名前、住所、電話、アドレス、ID、PW 名前、住所、電話、アドレス、ID、PW と入っていると表示されるのは 名前 住所 電話 アドレス ID PW 住所 電話 アドレス ID PW 住所 電話 アドレス ID PW となってしまって名前を取り出すことができません。 そこで最初は名前入っていたんだからと安直に二次元配列に変えることにしました。 import java.io.*; import java.util.*; public class aaa { public static void main(String aaa[]) throws Exception{ String[][] ad = new String[9999][9999]; int a = 0,c = 0,d=0; Scanner yomi = new Scanner( new File("C:\\addorres.csv") ); yomi.useDelimiter( "," ); List<String> adorr = new ArrayList<String>(); while( yomi.hasNext() ){ adorr.add( yomi.next() ); } for( String s: adorr ){ if(a==5) { c++; a=0; ad[a][c] = s; d++; }else{ ad[a][c]= s; a++; d++; } } a = 0; c = 0; for (int b=0;b<d;b++) { if(a==5) { c++; a=0; System.out.println(b+":"+ad[a][c]); }else{ System.out.println(b+":"+ad[a][c]); a++; } } } } そこでこの様に打ったんですが実行すると Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at aaa.main(aaa.java:7) と結果がこの様にエラーとして返ってきます。 どなたかこれを解決する方法又は1次元配列でも名前を表示させる方法がわかる方がいましたら お願い致します。

    • ベストアンサー
    • Java
  • 多次元配列の処理について

    多次元配列を扱った処理を行ないたいのですが、一部でnullを受け取ってしまい、処理を行うことができません。 引数の配列には次のようなテキストが入っています。 --配列の内容-- 0,名詞-一般,1,5, 0,名詞-数,2,6, 0,名詞-接尾-助数詞,3,7, -------------- この配列をコマンドラインに書き出すと正確に表示されます。 しかし、配列の内容を参照して処理を行なうと2列目の処理のときにnullを参照してしまいます。 プログラムは以下のとおりです。 ---プログラム--- public class Dist {   public static int zairyo(String[][] date) {    int a = 0;    int b = 0;    int c = 0;    int d = 0;    int e = 0;    if(date != null) {     int f = 0;     System.out.println("//Dist//");     for(int m = 0; m < date.length; m++) {      for(int n = 0; n < date[0].length; n++) {       if(date[m][n] != null) {        System.out.print(date[m][n] + "\t");        f++;        if(f == date[0].length) {         System.out.println("");         f = 0;        }       }      }     }     for(int i = 0; i < date.length; i++) {      if(date[i][1] != null) {       if(date[i][1] == "名詞-一般")        a++;       if(date[i][1] == "名詞-数")        b++;       if(date[i][1] == "名詞-接尾-助数詞")        c++;      }else System.out.println("2列目null");     }     int j = date.length - 1;     d = Integer.parseInt(date[j][2]);     e = Integer.parseInt(date[j][3]);    }else System.out.println("Dist:null");    if(a > 0 && b > 0 && c > 0 && d <= 10 && e <= 15) {     return 1;    }else return 0;   } } ------------------------ 原因は何なのでしょうか? ご教授お願いします。

  • 配列のデータ設定方法

    Java初心者です。 以下のコーディングを行いましたが Exception in thread "main" java.lang.NullPointerException at sample.org.test.test01.main(test01.java:12) になってしまいます。 コードは以下の通りです 1. package sample.org.test; public class test01 { /** * @param args */ public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ sample01[] faile = new sample01[1]; String buf = "123456"; faile[0].setDat((buf.getBytes())); sample02[] out = new sample02[1]; out[0].setFaile(faile); } } 2. package sample.org.test; public class sample01 { String car; byte[] dat; public String getCar() { return car; } public void setCar(String car) { this.car = car; } public byte[] getDat() { return dat; } public void setDat(byte[] dat) { this.dat = dat; } } 3. package sample.org.test; public class sample02 { private sample01[] faile; public sample01[] getFaile() { return faile; } public void setFaile(sample01[] faile) { this.faile = faile; } } 以上よろしくお願いします。

    • ベストアンサー
    • Java
  • 配列を使った・・・。

    配列を使って簡単な迷路を作っているのですが、なかなかうまくいきません。 0を" "1を"■"を表示させたいのですがうまくいきません。 何処を直せばいいのか教えてください。 public class Sample1 { public static void main (String[]args) { int [][] data = { {1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1}, {1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,1,0,1,1,1}, {1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1}, {1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1}, {1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1}, {1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1,1,1,1}, {1,1,1,1,0,0,1,1,0,1,0,1,1,1,0,1,1,1,1,1}, {1,1,1,1,0,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1}, {1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1}, {1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} }; for (int i=0; i<10; i++) { for (int j=0; j<20; j++) { System.out.print(data [i][j]); } if(data [i][j] = 1){ System.out.println("■"); }else{ System.out.println(" "); } } } }

    • ベストアンサー
    • Java
  • CSVファイルを多次元配列に格納する

    CSVファイルをopenCSVを読み込んでその行と列の要素数の多次元配列を作りその配列にデータを格納したいです。 しかし、データが格納できません。2回目の格納するためにwhileから何かおかしいのではないかと思っています。 なにかわかる方、アドバイスが欲しいです。 public class ReadCSV { public static void main(String[] args){ try{ CSVReader reader = new CSVReader( new FileReader("/home/masa/Desktop/WameiSample.csv")); //配列の宣言 String[] nextLine; //データを配列に入れる要素数を見る int j = 0; nextLine = reader.readNext(); int k = nextLine.length; System.out.println("列数[i]"+k); System.out.println("nextLine"+nextLine); while((nextLine = reader.readNext()) != null){ for (int i=0; i<nextLine.length; i++){ //System.out.print(nextLine[i] + "|" + i + "|"); } //System.out.println(); j++; } System.out.println("行数[j]"+j); //記憶する配列 String[][] Wamei = new String[k][j]; System.out.println("きてるよ"); //データを配列に格納していく int x = 0; while((nextLine = reader.readNext()) != null){ System.out.println("きてるよ");  <---こっから、表示してくれない. for (int y=0; y<nextLine.length; y++){ Wamei[x][y] = nextLine[y]; //多次元配列の要素を表示する System.out.print(Wamei[x][y]+"Wamei"+x+y); } System.out.println(); x++; } } catch (IOException e) { e.printStackTrace(); } } }

    • ベストアンサー
    • Java
  • java 配列について

    public class Sample{ public static void main( String[ ] args ){ String x = "pen"; String[] y = new String[1]; y[0] = x; x = "pencil"; System.out.println(y[0]); } } java初心者です。 配列の参照先を変更して 配列の数を変更せず配列0に 実行時にpencilと表示させたいのですが よい方法はありますでしょうか?

    • ベストアンサー
    • Java

専門家に質問してみよう