2016-06-01 5 views
0

Я читал о массивах в java, и я составил код для вычисления количества появлений всех чисел в массиве.Как создать статический массив в основном методе в java?

public class Example { 

    static int b[] = new int[13]; // I can not do static int b[] = new int[a.length] because a[] in not static array 
    static int count = 0; 

    public static void main(String[] args) { 

     int[] a = { 2, 3, 4, 3, 3, 5, 4, 10, 9, 1, 9, 11, 15 }; 
     counting(a); 
     printCount(); 
    } 

    private static void printCount() { 
     int k = 0; 
     for (int i = 0; i < b.length; i++) { 
      System.out.print("number" + " " + a[k] + " " + "is found" + " "); // here I get error in a[k] because it is not static , eclipse says : a cannot be resolved to a variable 
      System.out.println(b[i] + " " + "times"); 
      k++; 
     } 
     System.out.println(); 

    } 

    private static void counting(int[] a) { 
     for (int i = 0; i < a.length; i++) { 
      for (int k = 0; k < a.length; k++) { 
       if (a[i] == a[k]) { 
        b[i] = ++count; 
       } 
      } 
      count = 0; 
     } 

    } 
} 

я застрял в моем PrintCount() метод, то я не могу назвать мой в [] массив в методе, так как [] не является статическим основным методом. Я попытался написать static int[] a = { 2, 3, 4, 3, 3, 5, 4, 10, 9, 1, 9, 11, 15 }; в моем основном методе, но eclipse этого не принимает. Как я могу создать [] статический массив, чтобы его можно было найти во всех методах в моем классе класса выше?

Спасибо

+2

Переместить его из области только для метода ... Он должен быть объявлен в области, где объявлен b []. – CConard96

+2

Вы можете сделать глобальную переменную, как вы делали с 'b' и' count'. Или вы можете отправить массив в качестве параметра в метод с помощью 'printCount (a);' и изменить подпись метода на 'private static void printCount (int [] a)'. – Gendarme

+0

спасибо, не могу ли я оставить его в основном методе? есть способ справиться с этим, не перемещая его рядом с b [] array – Joe

ответ

4
public static void main(String[] args) { 

     int[] a = { 2, 3, 4, 3, 3, 5, 4, 10, 9, 1, 9, 11, 15 }; 
     counting(a); 
     printCount(a); 
    } 

Передайте массив в методе PrintCount().

+0

спасибо, не могу ли я сделать статический массив в основном методе? – Joe

+0

Извините. Я не получил тебя. Это только в основном методе. Просто передайте его в методе printCount(), чтобы вы могли получить к нему доступ. – FallAndLearn

+0

благодарю вас, поэтому вы имеете в виду, что я не могу сделать это в основном методе: 'static int [] a = {2, 3, 4, 3, 3, 5, 4, 10, 9, 1, 9, 11, 15 }; ' – Joe

2

Почему вы хотите, чтобы [] был статичным, если вы не хотите, чтобы он перешел из основного метода? Единственный способ доступа к нему за пределами main() - это если он прошел. Невозможно вызвать Example.a [] как обычную статическую переменную. Мне кажется, что вам нужно получить длину [] после ее инициализации, а затем установить границы для b [] в основном методе.

2

Вы можете переместить массив в область класса как статическую. Затем для вашего массива вы можете легко изменить массив.

Однако, как и другие упоминания, я рекомендую вам изучить scopes in Java.

public class Example { 

    static int[] a = { 2, 3, 4, 3, 3, 5, 4, 10, 9, 1, 9, 11, 15 }; 
    static int[] b = new int[a.length]; 
    static int count = 0; 

    public static void main(String[] args) { 
     counting(); 
     printCount(); 
    } 

    private static void printCount() { 
     int k = 0; 
     for (int i = 0; i < b.length; i++) { 
      System.out.print("number" + " " + a[k] + " " + "is found" + " "); 
      System.out.println(b[i] + " " + "times"); 
      k++; 
     } 
     System.out.println(); 

    } 

    private static void counting() { 
     for (int i = 0; i < a.length; i++) { 
      for (int k = 0; k < a.length; k++) { 
       if (a[i] == a[k]) { 
        b[i] = ++count; 
       } 
      } 
      count = 0; 
     } 

    } 
} 
Смежные вопросы