Палец вверх 0
Перевод
Перевод

метод / функция для генерации имен столбцов для электронной таблицы, аналогичной Excel

Я пытаюсь получить вывод ниже, например, если я передам 5 в имя столбца функции, он должен вывести A, B, C, D, E и если пройти 27, он должен вывести A, B, C, D, E .. .AA, AB, AC и т. Д.

Мне нужно работать с приведенным ниже фрагментом кода, и мне нужно работать только с методом columnNames.

  import java.io.*;
    import java.util.*;
    import java.text.*;
    import java.math.*;
    import java.util.regex.*;

public class Tester {

    static List<String> columnNames(int n) {
        List<String> result = new ArrayList<String>();


        return result;
    }

    public static void main(String[] args) throws IOException {
        Scanner in = new Scanner(System.in);

        int _columns = Integer.parseInt(in.nextLine().trim());

        List<String> result = columnNames(_columns);

        System.out.println(String.join(", ", result));
    }
}

Когда я добавил этот фрагмент в метод columnNames и передал 5 параметру, он печатает только букву столбца, эквивалентную введенному мною числу. Тем не менее, я ожидал увидеть A, B, C, D, E.

StringBuilder sb = new StringBuilder();
    while (n > 0) {

    for (int i = 0; i < n; i++) {
              n--;
              char ch = (char) (n % 26 + 'A');
              n /= 26;
              sb.append(ch);
              result.add(sb.toString());
         }

     }
    sb.reverse();

Спасибо за помощь.

java
задан brownwood 13 мая 2018 г., 0:42:02
источник

4 ответа

Палец вверх 0
Перевод
Перевод

Этот код производит то, что вы хотите:

    StringBuilder sb;

    char current = 'A';

    for (int i = 0; i < n; i++) {
        // new StringBuilder for every String
        sb = new StringBuilder();

        // If 'i' exceeds letters, use the ones you have already added to your List
        if (i > 25)
            sb.append(result.get(i - 26));

        // Append current character
        sb.append(current);

        // Add it to your List
        result.add(sb.toString());

        // Get the next letter while making sure it will not surpass 'Z'
        if (current == 'Z')
            current = 'A';
        else
            current = (char) (current + 1);
    }
ответ дан thunder197 13 мая 2018 г., 11:54:29
источник
Решение 0
Перевод
Перевод

Мне удалось выяснить это с помощью кода ниже. Спасибо тем, кто помог в пути.

static List<String> columnNames(int n) {
    List<String> result = new ArrayList<String>();

    String alphabets[] = {"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"};
    StringBuilder sb = new StringBuilder();
    for(int j = 0; j < n; j++){
        int index = j/26;   
            char ch = (char) (j % 26 + 'A');               
          sb.append(ch);
          String item = "";
          if(index > 0) {
              item += alphabets[index-1];
          }
          item += alphabets[j % 26];
          result.add(item);
    }
    sb.reverse();
    return result;
}
ответ дан brownwood 13 мая 2018 г., 13:51:24
источник
Палец вверх 0
Перевод
Перевод

Это именно то, что вы хотите.

static List<String> columnNames(int n) 
{
    List<String> result = new ArrayList<String>();

    String[] alphs = new String[] {"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"};



    if(n>-1 && n<27)
    {
        for(int i=0; i<n;i++)
        {
            result.add(alphs[i]);
        }

    }
    else
    {

        for(int i=0;i<26;i++)
        {
            result.add(alphs[i]);   
            n--;
        }

        for(int i=0;i<result.size();i++)
        {
            for(int j=0; j<26; j++)
            {
                if(n!=0)
                {
                    result.add(result.get(i).concat(alphs[j]));
                    n--;
                }
                else
                {
                    return result;
                }

            }

        }

    }

    return result;
}
ответ дан Faizan Malik 10 сент. 2018 г., 0:27:19
источник
Палец вверх -1
Перевод
Перевод

код не может выйти и запустить для n> 702

Java Doodle ссылка Работа до последовательности 'ZZ'

ответ дан Swapnil Navalakha 13 дек. 2018 г., 5:10:23
источник