how to create 2D array of enumeration values

foe example i have

enum Days {Day1,Day2,Day3}
enum Subjects {Subject1,Subject2,Subject3}

how can i create its two dimension array two show these values in rows and coloumns

Recommended Answers

All 17 Replies

Iterate over the enum, for each value, invoke the name() method which will return the name as String. You can then store the name in a 2d array of String.

how to create 2D array of enumeration values

foe example i have

enum Days {Day1,Day2,Day3}
enum Subjects {Subject1,Subject2,Subject3}

how can i create its two dimension array two show these values in rows and coloumns

public class EnumProblem {

  enum Days {Monday, Tuesday, Wednesday, Thursday, Friday}
  enum Periods {Period1, Period2, Period3, Period4, Period5}

  // Define 2 dim array using the above enums  
  Object[][] twoDim = new Object[][] {{Days.Monday, Periods.Period1}, {Days.Tuesday, Periods.Period2}};
}
public class EnumProblem {

  enum Days {Monday, Tuesday, Wednesday, Thursday, Friday}
  enum Periods {Period1, Period2, Period3, Period4, Period5}

  // Define 2 dim array using the above enums  
  Object[][] twoDim = new Object[][] {{Days.Monday, Periods.Period1}, {Days.Tuesday, Periods.Period2}};
}

i want to do this using String , not Object ...when i am writing String instead of Object it is giving an error.

Here is the code.

class EnumProg {
  enum Days {Mon, Tues, Wed, Thurs, Fri}
  enum Periods {Period1, Period2, Period3, Period4, Period5}
  public static void main (String [] args)
  {
  String[][] twoDim; 
  twoDim = new String[5][5] ;
  {
  for ( Days day : Days.values() )
      {
        for (Periods prds : Periods.values() )
        System.out.println (twoDim[day.name()][prds.name()]);
      }
  }
 }
}

it is giving an error.

Please copy and paste here the full text of the error message.

The indexes to arrays should be integers not Strings.

here is the error, please ghelp me creating 2D array of enum values in rows and coloumns

EnumProg.java:12: incompatible types
found   : java.lang.String
required: int
        System.out.println (twoDim[day.name()][prds.name()]);
                                           ^
EnumProg.java:12: incompatible types
found   : java.lang.String
required: int
        System.out.println (twoDim[day.name()][prds.name()]);

The compiler is telling you that:
The indexes to arrays should be integers not Strings.

Use the ordinal() method to get an integer

how to use ordinal() method can you pelase help ?
i'm trying for two days to create 2D array from enum but didn't get it right :(
its really annoying....i tried thousands of way so far

class EnumProg {
  enum Days {Mon, Tues, Wed, Thurs, Fri}
  enum Periods {Period1, Period2, Period3, Period4, Period5}
  public static void main (String [] args)
  {
  String[][] twoDim; 
  twoDim = new String[5][5] ;
  {
  for ( Days day : Days.ordinal() )
      {
        for (Periods prds : Periods.ordinal() )
        System.out.println (twoDim[day.name()][prds.name()]);
      }
  }
 }
}

Replace name() with ordinal()

Why did you use the name() method?

i am using name() to print the values

Sorry, I meant to ask:
Why did you use the name() method to get indexes to the array?

Alright i've create a Single Dimensional Array which is working fine....
now how can i create a 2D array.
here is the code.

class EnumProg {
  enum Days {Mon, Tues, Wed, Thurs, Fri}
  enum Periods {Period1, Period2, Period3, Period4, Period5}
  public static void main (String [] args)
  {
    Days day[] = Days.values();
    for(Days a : day)
      System.out.print(a + "\t ");
 }
}

how can i create a 2D array

What type of data do you want to be in the array?

<type>[][] nameOf array = new <type>[dim1][dim2];

Replace <type> with the data type or class.

i want to store the enum values in String array and access the values through array. here is the final program

class EnumProg {
  enum Days {Mon, Tues, Wed, Thurs, Fri}
  enum Periods {Period1, Period2, Period3, Period4, Period5}
  public static void main (String [] args)
  {
    for(Days day : Days.values()){
      System.out.print(day + "" + "\t\t");
    }
    System.out.println ("");
    for ( Periods period : Periods.values() ){
        for(int i=0; i<5; i++){
    System.out.print (period + "\t\t");
        }
    System.out.println ("");
  }
 }
}

store the enum values in String array

Isn't there a problem with mixed types here?
enums are not Strings.
You could use the .name() method to get Strings for each of the enum constants and store those strings in the array.

This works:

String[] enumNames = new String[] {Days.Monday.name(), Days.Tuesday.name()};
     System.out.println(Arrays.toString(enumNames));  // show array's contents: [Monday, Tuesday]

I wonder if the following way is a candidate answer for Xufyan's question?
Should we make Days type 1D array and Periods type 1D array to play a go-between role? Then use the method name() to store the names in two final String arrays?

public class Enumeration0 {
  enum Days {Monday, Tuesday, Wednesday, Thursday, Friday}
  enum Periods {Period1, Period2, Period3, Period4, Period5}
  
    public static void main(String[] args){
    String sd[]=new String[5]; // allocate String array sd
    String sp[]=new String[5]; // allocate String array sp
    Days d[] = Days.values();  // create Days array d with values of Days
    Periods p[]=Periods.values(); // create Periods array p with values of Periods
    
    for(int i=0; i<5; i++){  // store the enum values in String arrays: sd and sp 
	sd[i]=d[i].name();
	sp[i]=p[i].name();
		}
    for (String  s : sd)   // print String array sd
	System.out.print(s + " ");
	System.out.println();
    for (String  s : sp)  // print String array sp
	System.out.print(s + " ");
	System.out.println();
	}
}

To store two Enum type objects:
enum Days {Mon, Tues, Wed, Thurs, Fri}
enum Periods {Period1, Period2, Period3, Period4, Period5}
in a 2D String array, one should start with the line of code :

String twoDim[][]= new String[2][5]; // Xufyan incorrectly wrote new String[5][5]

Then we may store the values in the String 2D array twoDim with the following code without "go-between". I also noticed that as NormR1 indicated, the method name() should be used since enums are not Strings.

twoDim = new String[2][5] ;
   int i=0;
  for ( Days day : Days.values() )
   twoDim[0][i++]=day.name();
      i=0;
  for (Periods prds : Periods.values()) 
   twoDim[1][i++]=prds.name();

One may also use the ordinal() method to provide index for the twoDim so that the int i could be saved.

String twoDim[][] = new String[2][5] ;
   for ( Days day : Days.values())
      twoDim[0][day.ordinal()]=day.name();

   for (Periods prds : Periods.values()) 
      twoDim[1][prds.ordinal()]=prds.name();
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.