Печать массива - PullRequest
       48

Печать массива

0 голосов
/ 11 июня 2011

У меня есть массив из 28 символов. Я пытаюсь использовать цикл for для печати строки и ее длины, чтобы следующая строка удаляла последний символ из предыдущей строки. Например:

7 Example
6 Exampl
5 Examp
4 Exam
3 Exa
2 Ex
1 E

У меня пока что есть, но это не печать. Что я делаю не так?

for(int index=28; index <= nameArray.length; index--)
            {
                System.out.print(nameArray[index]);
            }

Ответы [ 5 ]

3 голосов
/ 11 июня 2011

Это так просто ..

class A {
    public static void main(String [] args) {
        String array = "Example";

    for(int i=7;i>0;i--) {  
          System.out.print(i+" ");    
          System.out.println(array.substring(0, i)); 
        }
      } 
   }  

// Output :   
7 Example
6 Exampl
5 Examp
4 Exam
3 Exa
2 Ex
1 E
2 голосов
/ 11 июня 2011

Если длина составляет 28 символов, вы не можете начать индекс с 28. Массивы в Java начинаются с нуля, что означает, что индекс может варьироваться от 0 до 27 (длина - 1).

1 голос
/ 12 июня 2011

Всегда помните, что индексы массива начинаются с 0

[E][x][a][m][p][l][e] 
 0  1  2  3  4  5  6

Я не понимаю, почему ты ломаешь голову массивами символов, когда у тебя есть String. Здесь я предлагаю вам решение, где:

1 - преобразовать символ [] в строку

2-Итерация объекта String и использование некоторых методов из класса String для получения желаемого результата:

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

       //Here an array with 28 characters
       char[] array = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p'
           ,'q','r','s','t','u','v','w','x','y','z','!','@'};

      //For easier manipulation i will just transform that array to String
      //Why not, String was invented so we dont have to use char[].
      String arrayAsString = new String(array);

    //Use the methods that String class provides, to make the solution easier    
    for(int i=0;i < array.length;i++) {    
      System.out.println((i+1) + " " +  arrayAsString.substring(0,(arrayAsString.length()-i)));
    }
    }
}
1 голос
/ 11 июня 2011

Во-первых, вы, вероятно, хотите, чтобы ваше среднее состояние было index > 0, а не index <= nameArray.length (что должно всегда быть истинным, даже если вы вводите отрицательные числа).

Во-вторых, это массив символов , к которому вы обращаетесь? Если это так, то, как я уверен, вы знаете, nameArray[index] относится к символу , а не к строке.

(Также, как указывает bobbymcr , верхний индекс в массиве из 28 элементов - 27, а не 28.)

Для печати подстрок вы должны сначала инициализировать String, используя массив символов, , а затем распечатать все меньшие подстроки, используя substring.

Например:

private static void printSubstrings(String input) {
    for (int length = input.length(); length > 0; length--) {
        System.out.printf("%d %s\n", length, input.substring(0, length));
    }
}

Тогда, если nameArray является char[], вы можете использовать конструктор String(char[]) для перехода к этому методу:

printSubstrings(new String(nameArray));

Пример ввода:

char[] nameArray = new char[] { 'E', 'x', 'a', 'm', 'p', 'l', 'e' };
printSubstrings(new String(nameArray));

Выход:

7 Example
6 Exampl
5 Examp
4 Exam
3 Exa
2 Ex
1 E
0 голосов
/ 11 июня 2011
for(int index=28; index <= nameArray.length; index--)

Во-первых, вы пытаетесь начать с индекса 28 - этого не существует.Массивы основаны на 0, что означает, что они идут от 0 до length - 1

Во-вторых, вы говорите, что индекс должен быть меньше или равен длине.Поскольку вы идете от конца к началу, это всегда будет правдой.

for (int index = nameArray.length - 1; index >= 0; index--)

Это то, что вы ищете.

...