OfficialSub0 Ответов: 1

Как создать вложенный цикл для буквенных комбо?


Я создаю графический интерфейс телефонного номера, используя объект StreamWriter для записи в файл всех возможных семибуквенных слов, соответствующих этому номеру. 2= " ABC "3=" DEF "4=" GHI " и т. д. Я не уверен, как создать цикл, который будет писать различные комбинации букв?

- Спасибо!

Что я уже пробовал:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TeleNumLetters
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int[] numberInput = new int[8] { 2, 3, 4, 5, 6, 7, 8, 9 };
        int maxLength = 7;
        char[] phoneArray = new char[7];

        char[] number2 = { 'A', 'B', 'C' };
        char[] number3 = { 'D', 'E', 'F' };
        char[] number4 = { 'G', 'H', 'I' };
        char[] number5 = { 'J', 'K', 'L' };
        char[] number6 = { 'M', 'N', 'O' };
        char[] number7 = { 'P', 'Q', 'R', 'S' };
        char[] number8 = { 'T', 'U', 'V' };
        char[] number9 = { 'W', 'X', 'Y', 'Z' };
        private string phoneNumber;

        public void ConvertNumber()
        {
           //**This is the loop I attempted but I'm confused//
            string phoneNumber = textBox1.Text;
            for (int i = 0; i < 7; i++)
            {
                phoneArray[i] = phoneNumber.ElementAt(i);

                for (int i1 = 0; i1 < phoneArray[0]; i1++)
                {
                    for (int i2 = 0; i2 < phoneArray[1]; i2++)
                    {
                    }
                }
            }
        }  

        private void generateButton_Click(object sender, EventArgs e)
            {
                using (System.IO.StreamWriter writer = new System.IO.StreamWriter("WriteLines.txt", true))
                {
                    writer.WriteLine(phoneArray);
                }
            }


            private void button2_Click(object sender, EventArgs e)
            {
                int maxLength = 7;
                if (textBox1.TextLength < maxLength)
                {
                    textBox1.Text += Convert.ToString(numberInput[0]);
                }
                else { }

                using (System.IO.StreamWriter writer = new System.IO.StreamWriter("WriteLines.txt", true))
                {
                    writer.WriteLine();
                }
            }

            private void button3_Click(object sender, EventArgs e)
            {
                if (textBox1.TextLength < maxLength)
                {
                    textBox1.Text += Convert.ToString(numberInput[1]);
                }
                else { }

                using (System.IO.StreamWriter writer = new System.IO.StreamWriter("WriteLines.txt", true))
                {
                    writer.WriteLine();
                }
            }

            private void button4_Click(object sender, EventArgs e)
            {
                if (textBox1.TextLength < maxLength)
                {
                    textBox1.Text += Convert.ToString(numberInput[2]);
                }
                else { }

                using (System.IO.StreamWriter writer = new System.IO.StreamWriter("WriteLines.txt", true))
                {
                    writer.WriteLine();
                }
            }

            private void button5_Click(object sender, EventArgs e)
            {
                if (textBox1.TextLength < maxLength)
                {
                    textBox1.Text += Convert.ToString(numberInput[3]);
                }
                else { }

                using (System.IO.StreamWriter writer = new System.IO.StreamWriter("WriteLines.txt", true))
                {
                    writer.WriteLine();
                }
            }

            private void button6_Click(object sender, EventArgs e)
            {
                if (textBox1.TextLength < maxLength)
                {
                    textBox1.Text += Convert.ToString(numberInput[4]);
                }
                else { }

                using (System.IO.StreamWriter writer = new System.IO.StreamWriter("WriteLines.txt", true))
                {
                    writer.WriteLine();
                }
            }

            private void button7_Click(object sender, EventArgs e)
            {
                if (textBox1.TextLength < maxLength)
                {
                    textBox1.Text += Convert.ToString(numberInput[5]);
                }
                else { }

                using (System.IO.StreamWriter writer = new System.IO.StreamWriter("WriteLines.txt", true))
                {
                    writer.WriteLine();
                }
            }

            private void button8_Click(object sender, EventArgs e)
            {
                if (textBox1.TextLength < maxLength)
                {
                    textBox1.Text += Convert.ToString(numberInput[6]);
                }
                else { }

                using (System.IO.StreamWriter writer = new System.IO.StreamWriter("WriteLines.txt", true))
                {
                    writer.WriteLine();
                }
            }

            private void button9_Click(object sender, EventArgs e)
            {
                if (textBox1.TextLength < maxLength)
                {
                    textBox1.Text += Convert.ToString(numberInput[7]);
                }
                else { }

                using (System.IO.StreamWriter writer = new System.IO.StreamWriter("WriteLines.txt", true))
                {
                    writer.WriteLine();
                }
            }
        }
    }

1 Ответов

Рейтинг:
8

Richard MacCutchan

Учитывая число, вам нужно создать строку для каждой цифры, и вы можете использовать что-то вроде:

//                     0     1     2      3      4   ... etc
string[] letters = { "???", "+", "ABC", "DEF", "GHI" }; // add the rest yourself
string number = "321";
// split the number into an array of integers thus
int[] numbers = { 3, 2, 1 };

foreach (char c1 in letters[numbers[0])
{
    foreach (char c2 in letters[numbers[1])
    {
        foreach (char c3 in letters[numbers[2])
        {
            Console.WriteLine("{0}{1}{2}", c1, c2, c3);
        }
    }
}

И разверните для других цифр.


OfficialSub0

Это, вероятно, глупый вопрос, но должен ли я удалить оператор StreamWriter из всех button_Click(Object sender, EventArgs e)/generateButton_CLick и создать новый метод с StreamWriter в цикле? Я просто продолжаю получать пустой текстовый файл.

-Спасибо

Dave Kreskowiak

Зачем вам создавать новый StreamWriter каждый раз, когда вы хотите записать строку в файл?

Нет, вы держите конструкцию StreamWriter вне цикла.

Richard MacCutchan

Вы делаете запись в файл в том месте, где я поместил запись в консоль. Откройте файл перед циклом и закройте его после.

OfficialSub0

Я думаю, что понял суть, но если я выбрал 825-3688, чтобы соответствовать буквам "стрижка", то цикл объединяет случайные буквы. Вот что я попробовал:

частная generateButton_Click недействительным(объект отправителя, EventArgs в электронной)
{
используя (системы.ИО.Писатель модулю записи StreamWriter =
новая System. IO. StreamWriter("WriteLines.txt", правда))
{
строки и phonenumber = текстовое поле textbox1.Текст;
for (int i = 0; i < 7; i++)
{
phoneArray[i] = номер телефона.ElementAt(я);
}
строка[] буквы = { "+", "АБВ", "деф", "гхи", "Хэллоуин", "МНО", "рекомендуется", "ТЮФ", "WXYZ" };
номер строки = " 87654321";

int [] числа = { 8, 7, 6, 5, 4, 3, 2, 1 };

foreach (char c1 in letters[numbers[0]])
{
foreach (char c2 in letters[numbers[1]])
{
foreach (char c3 in letters[numbers[2]])
{
foreach (char c4 in letters[numbers[3]])
{
foreach (char c5 in letters[numbers[4]])
{
foreach (char c6 in letters[numbers[5]])
{
foreach (char c7 in letters[numbers[6]])
{
писатель.WriteLine("{0}{1}{2}{3}{4}{5}{6}", С1, С2, С3, С4, С5, С6, С7);
}
}
}
}
}
}
}
}
}

Richard MacCutchan

Это не соответствует стрижке, которая была бы 424-7288.

OfficialSub0

Когда я пытаюсь это сделать все комбо выглядят так
WTPMJGD
WTPMJGE
WTPMJGF
WTPMJHD
WTPMJHE
WTPMJHF
..прием

Richard MacCutchan

Извините за мою ошибку, но в массиве букв должна быть фиктивная запись для 0-го элемента. См. обновленное решение.

OfficialSub0

Независимо от того, какие числа я выберу, комбо - WTPMJGD
WTPMJGE, WTPMJGF...и т. д. будут записываться в файл.
string number = "87654321"; / / значение присваивается, но никогда не используется//
может быть, именно здесь я все испортил?


Richard MacCutchan

Вы жестко закодировали номер 87654321 в своем numbers массив.