2016-11-29 2 views
-2

Так что я в основном есть массив, который выглядит следующим образом:сосчитать, сколько раз появляется буква в 2d массив JAVA

BG6001;1193;M;63;B+ 
BG6001;1124;M;41;C 
BG6001;1121;F;FA;FA 
BG6001;1143;M;26;FA 
BG6001;1157;F;74;A 

И то, что я пытаюсь сделать, это подсчитать, сколько раз буква " M "и добавить его в счетчик

Любые идеи?

То, что я пытался до сих пор:

for (int i=0; i<name.length(); i++) { 
    if (name.charAt(i)=='M') counter++; 
} 
System.out.println("the string contains " + count + " times the letter M") 
+1

Вы пытались исследовать? Пожалуйста, по крайней мере, приложите некоторые усилия, прежде чем отправлять сообщения в StackOverflow. – Jay

+0

Привет, да, я пытался реализовать другие решения в моем проекте, и это просто не сработает, извините, хотя, поскольку я новичок в java, это была моя последняя попытка: 'for (int i = 0; i <имя.length(); i ++) { if (name.charAt (i) == 'M') counter ++; } System.out.println ("строка содержит" + count + "раз букву M"); ' –

+1

http://meta.softwareengineering.stackexchange.com/questions/6166/open-letter-to- студенты-с-домашние задания-проблемы – EJoshuaS

ответ

1

Вы, вероятно, следует использовать цикл Еогеасп. Попробуйте реализации что-то вроде этого:

int counter=0; 
String[][] array = something; 
for(String[] subArray : array) 
    for(String string : subArray) 
     if(string.toLowerCase().equals("m")) 
      counter++; 
//Counter has the value of the amount of 'm's in the array 
+0

Я попытался реализовать его вот так: 'String [] [] array = studentData; для (String [] подмассив: массив) для (String строки: подмассив) , если (. String.toLowerCase() равно ("М")) счетчика ++; System.out.println (counter); 'но я получаю ошибку времени выполнения (исключение в потоке" main "java.lang.NullPointerException) –

+0

@mikefischer хорошо, в первую очередь сравнить string.toLowerCase с строчным« m »или используйте string.toUpperCase() и сравнивайте с «M» или доверяйте данным, которые должны быть последовательными, и сравните строку с «M». Что касается NPE, не могли бы вы показать, на какую строку кода ссылается stacktrace? может ли проблема заключаться в том, что studentData является строкой []? или он может содержать нуль? –

+0

это действительно строка, я полагаю, я опубликовал это раньше, чем studentData, что я могу сделать по этому поводу? http://pastebin.com/kn0KcM7a @ 7H3_H4CK3R –

0

@ Mike Фишера, пожалуйста, проверьте код ниже whoich дает вам отсчет «M» в массиве.

public class Arraycount { 
public static void main(String args[]){ 
String[] a=new String[5]; 
a[0]="BG6001;1193;M;63;B+"; 
a[1]="BG6001;1124;M;41;C"; 
a[2]="BG6001;1121;F;FA;FA"; 
a[3]="BG6001;1143;M;26;FA"; 
a[4]="BG6001;1157;F;74;A"; 
int count=0; 
for(int i=0;i<=a.length-1;i++){ 

    for(int j=0;j<=a[i].length()-1;j++){ 
     char c=a[i].charAt(j); 
     if(c=='M'){ 
      count++; 
     } 
    } 
} 
System.out.println("Number of M present in an array is "+count); 
} 
} 
0

Мой ответ очень похож на ответ 7H3_H4CK3R с некоторым изменением. В частности, если конкретная буква (в данном случае «M») может появляться в любом месте строки, вы можете сделать следующее (и я прошу прощения за использование синтаксиса C#, а не синтаксиса Java, я не сижу перед Java компилятор, но, надеюсь, разница будет не слишком трудно следовать):

private static int Count(string[][] data, char letterToFind) 
    { 
     int count = 0; 

     // Loop over each array 
     foreach (string[] array in data) 
     { 
      // Each array is a collection of strings 
      foreach (string str in array) 
      { 
       // Loop through the characters in each string 
       for (int i = 0; i < str.Length; i++) 
       { 
        if (str[i] == letterToFind) 
        { 
         count++; 
        } 
       } 
      } 
     } 

     return count; 
    } 

с другой стороны, если вы ищете что-то, где вся строка ответа «M» 7H3_H4CK3R должен сделать трюк.

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