Member 14388752 Ответов: 2

Может ли кто-нибудь помочь мне преобразовать мой код C++ в java? Я очень запутался и запускаю его совершенно неправильно.


Это мой c++
#include<iostream>
using namespace std;
int c = 0,cost = 999;
int graph[4][4] = { {0, 10, 15, 20},
                    {10, 0, 35, 25},
                    {15, 35, 0, 30},
                    {20, 25, 30, 0}
                  };
void swap (int *x, int *y)
{
    int temp;
    temp = *x;
    *x = *y;
    *y = temp;
}
void copy_array(int *a, int n)
{
    int i, sum = 0;
    for(i = 0; i <= n; i++)
    {
        sum += graph[a[i % 4]][a[(i + 1) % 4]];
    }
    if (cost > sum)
    {
        cost = sum;
    }
}  
void permute(int *a, int i, int n) 
{
   int j, k; 
   if (i == n)
   {
        copy_array(a, n);
   }
   else
   {
        for (j = i; j <= n; j++)
        {
            swap((a + i), (a + j));
            permute(a, i + 1, n);
            swap((a + i), (a + j));
        }
    }
} 
int main()
{
   int i, j;
   int a[] = {0, 1, 2, 3};  
   permute(a, 0, 3);
   cout<<"minimum cost:"<<cost<<endl;
   getch();
}


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

Я попытался преобразовать его, создав подклассы в своем основном классе, но я просто изучаю C, поэтому перенос его на Java действительно беспокоит меня

это первоначальный вопрос
Задание 4 - электронная почта, Швиттер и наследование
Выберите один из вариантов ниже. Все (оба) варианта стоят одинаковое количество баллов. Более продвинутые варианты предусмотрены для студентов, которые находят базовый вариант слишком легким и хотят больше проблем. Убедитесь, что вы прочитали и поняли
● оба модуля А и в на этой неделе, а также
● модуль 2R - требования к лабораторным работам
перед отправкой этого задания.
Вариант а (базовый). Сообщение, электронная почта и Швит понимают классы и проблему каждое сообщение содержит некоторый контент ("Британцы идут. Англичане идут!" и создатель, или автор ("Пол Ревир"). Мы могли бы усилить их, добавив другие признаки (дату и/или время создания), но давайте оставим вещи простыми и скажем, что это только два аспекта основного сообщения.
Некоторые сообщения, однако, имеют дополнительные компоненты, которые определяют их. Например, электронное письмо состоит из обычного сообщения плюс, по крайней мере, два других элемента. адрес электронной почты и на адрес электронной почты. Электронная почта-это сообщение, но особого рода сообщение. Так что мы чувствуем запах наследства по соседству. Сообщение кажется хорошим базовым классом, а электронное письмо, имеющее отношение is a с сообщением, является хорошим кандидатом на производный класс или расширение сообщения базового класса.
Между тем, твит состоит из обычного сообщения плюс, по крайней мере, еще один элемент. от id пользователя. Твит-это тоже сообщение. Он имеет другой вид специализации, чем электронная почта, поэтому это другое расширение базового класса. (Мы не рассматриваем прямой твит, который также потребуется идентификатор пользователя.)
Not only will both emails and tweets contain extra data than the base class, message, but in at least one instance we will see the same member (the content) have a different kind of restriction in the derived class than in the base class (can you guess what I'm suggesting before you read on?). Thus, even though we store the tweet content in the base class member, without the need for a new content area for the tweet, we will still have a different validation of the length of that message content. Warning. Because it makes sense to do so, we are going to name the message content message and the message class Message . So what I called content in the above paragraph will be known as (lower-case) message in what comes next. The class, itself, will be (upper-case) Message. You'll see. Just keep reading.
файловая структура. Я предпочитаю один файл для всей программы, поэтому вы можете поместить все классы вместе с main() в один файл.
Базовый класс: сообщение ваш базовый класс называется Message . Открытые или защищенные (на ваш выбор) статические константы класса определяют полный набор ограничений
и дефолты
, например MAX_MSG_LENGTH и DEFAULT_AUTHOR, как для минимальной, так и для максимальной длины и данных по умолчанию каждого члена. Установите максимальную длину сообщения на большое число (не менее миллиона), а максимальную длину автора-на разумное значение, например 40 или 65, а не 5 или 200.
Закрытые данные члена ● строковое сообщение; ● автор строки; открытые методы ● конструкторы по умолчанию и 2 параметра.
● Мутатор и аксессор для каждого члена.
● метод toString (), который предоставляет хорошо отформатированную возвращаемую строку для потенциального ввода-вывода экрана.
Частные методы ● частные помощники статической проверки для фильтрации параметров клиента. Они будут поддерживать ваши публичные методы.
Recommended test o. Class Message Instantiate two or more Message objects, some using the default constructor and some using the parameter-taking constructor. Mutate one or more of the members, and after that use the toString() to assist a screen output so we can see what all of your objects contain. Next, test one or more accessors. Finally, test two or more mutators, providing both legal and illegal arguments and testing the return values (thus demonstrating that the mutators do the right thing). Here is a sample run from my test (but you will have to imagine/deduce the source I used and create your own source for your testing, which will produce a different output).
Пример выполнения теста класс сообщение /* --------------------------------------------------------
Тестирование Базового Класса ***********************************

Автор: Kinnard Message ---------------------
Некоторые сообщения просто не стоит отправлять.

Автор: loceff Message ---------------------
всем привет
тестирование средств доступа к сообщениям:
Киннард
всем привет

тестирование мутаторов сообщений:
слишком долго (как и ожидалось)
Автор: Kinnard Message ---------------------
Некоторые сообщения просто не стоит отправлять.

приемлемая длина (разделительная. быть)
Автор: Kinnard Message ---------------------
Длинная строка abcde abcde abcde abcd. АБВГД АБВГД АБВГД. АВСD. АВСD. АВСD. Азбука
д. АБВГД АБВГД. abcde abcde abcde
--------------------------------------------------------- */
Производный класс: электронная почта ваш первый производный класс называется электронной почтой. Электронная почта использует два члена, уже присутствующих в базовом классе. сообщение электронной почты-это сообщение базового класса, а автор базового класса-это фактическое имя автора письма (а не адрес электронной почты от, который я представлю далее). Не пытайтесь сохранить текст сообщения электронной почты или автора в качестве нового члена производного класса, иначе вы получите -20 баллов, что нежелательно ни для вас, ни для меня. Дублирование данных базового класса в производном классе означает, что вы не понимаете, что такое наследование, следовательно, значение такого рода ошибки.
Открытые статические константы класса к существующей статике базового класса добавьте по крайней мере две с именами и значениями, похожими или идентичными MAX_EMAIL_ADDRESS_LENGTH и DEFAULT_EMAIL_ADDRESS. Найдите максимальную длину адреса электронной почты и сделайте свой адрес не больше этого (но вы можете сделать его меньше для облегчения тестирования).
Дополнительные Личные Данные Участника . строки fromAddress;. строки устранению; общие методы ● по умолчанию и 4-параметр конструктора. Используйте цепочку конструкторов.
● Мутатор и аксессор для новых членов.
● Переопределите те методы базового класса, для которых это имеет смысл сделать. Подумайте об этом и придите к своим собственным выводам.
Частные методы ● частный помощник статической проверки для фильтрации неверного адреса электронной почты. Вы должны сделать минимум, но вы не должны быть более полными, чем это. Это просто чтобы показать, что вы можете выполнять базовую фильтрацию. Минимум-это метод isValidEAddr() (или аналогично названный), который проверяет как длину, так и существование по крайней мере одного символа '@' и одного символа'.'. Дальнейшее зависит от вас, но не переусердствуйте и не будьте слишком ограничительными.

Рекомендуется тест о'. Класс Электронной Почты
Аналогично классу сообщений.
Пример тестового запуска класса электронной почты (выполняется в том же режиме, что и общий запуск программы) тестирование производного класса электронной почты ***********************************

От кого: lili999@g mail.com
Кому: hloe123@g mail.com.com
Автор: Лили кой сообщение ---------------------
АРФ АРФ АРФ АРФ ........ АРФ

От кого: chloe123@g mail.com
Кому: lili999@g mail.com
Автор: chloe Message ---------------------
кора кора
тестирование средств доступа к электронной почте:
lili999@г mail.com
lili999@г mail.com
тестирование мутаторов электронной почты:
слишком долго (как и ожидалось)
От кого: lili999@g mail.com
Кому: hloe123@g mail.com.com
Автор: Лили кой сообщение ---------------------
АРФ АРФ АРФ АРФ ........ АРФ

отсутствует @ char (как и ожидалось)
От кого: lili999@g mail.com
Кому: hloe123@g mail.com.com
Автор: Лили кой сообщение ---------------------
АРФ АРФ АРФ АРФ ........ АРФ

отсутствует точка char (как и ожидалось)
От кого: lili999@g mail.com
Кому: hloe123@g mail.com.com
Автор: Лили кой сообщение ---------------------
АРФ АРФ АРФ АРФ ........ АРФ
--------------------------------------------------------- */
Производный класс: Shweet ваш второй производный класс называется Shweet.
(Это похоже на твит в Твиттере, но поскольку я не могу быть уверен, что детали твита точно соответствуют тому, что я здесь заявляю, мы отключим это от Твиттера и сделаем ограничения, которые я налагаю, точными для Швита указом.)
Shweet использует два члена, уже присутствующих в базовом классе. Сообщение Shweet-это сообщение базового класса, а автор базового класса-это фактическое имя автора Shweet (а не идентификатор Shwitter, который я представлю далее). Не пытайтесь сохранить тело сообщения Shweet или автора в качестве новых участников, иначе вы получите -20 баллов, как упоминалось выше.
Публичные статические константы класса к существующей статике базового класса добавьте три с именами и значением, похожими или идентичными MAX_SHWITTER_ID_LENGTH (15), MAX_SHWEET_LENGTH (140) и DEFAULT_USER_ID. Посмотрите вверх и используйте фактические максимальные длины первых двух констант.
Хотя MAX_SHWEET_LENGTH будет меньше, чем MAX_MSG_LENGTH базового класса, не принимайте этот факт в своей реализации. Допустимая длина сообщения для Shweet должна быть меньше обоих этих значений. Если это неверное сообщение базового класса, то это неверное сообщение Shweet, и это должно быть верно, если мы позже изменим длину MAX_SHWEET_LENGTH на 50 миллионов.
Дополнительная строка данных частного члена fromID; открытые методы ● конструкторы по умолчанию и 3-параметрические конструкторы. Когда это возможно и имеет смысл, используйте цепочку конструкторов. Подумайте, к какому конструктору привязать цепочку.
● Мутатор и аксессор для нового члена.
● Переопределите те методы базового класса, для которых это имеет смысл сделать. Подумайте об этом и придите к своим собственным выводам. Вы должны каким-то образом принудительно установить ограничения длины как базового класса, так и производного класса для одного и того же члена сообщения.
Private Methods ● private static validation helpers (plural) to filter out bad tweets and shwitter IDs. Create a. isValidShweet() for the message. Also, create an isValidShwitterID() for the Shwitter ID. But also, make a third, even lower-level, helper that would make isValidShwitterID() clear and short. This helper-helper should be named something like stringHasOnlyAlphaOrNumOrUnderscore() and that name tells you the kind of thing it should do: it should make sure the shwitter ID contains only some combination of letters, numbers or an underscore ('_'). The name of this method is fine - don't try to apply boolean logic to it as there is no way to do so. The definition is what you care about. Also, I don't care whether you decide that the Shwitter ID be case sensitive. If you don't know the built-in C+. string or char methods that can help you here, look them up online. They are very easy to find.
Рекомендуется тест о'. Shweet класс похож на класс сообщение.
Пример тестового запуска класса Shweet (выполняется в том же режиме, что и общий запуск программы) тестирование производного класса Shweet ***********************************

Shweet: Kim Kardashian @kimkardashian
О олень https://www.keek.com/!PYjCdab

Shweet: Katy Perry @katyperry
Это глагол и прилагательное.

тестирование аксессуаров Shweet:
kimkardashian
тестирование Швит-мутаторов:
плохой идентификатор швиттера (как и ожидалось)
Shweet: Kim Kardashian @kimkardashian
О олень https://www.keek.com/!PYjCdab

приемлемый идентификатор швиттера (как и ожидалось)
Shweet: Ким Кардашян @a_good_user99
О олень https://www.keek.com/!PYjCdab
--------------------------------------------------------- */
Вариант В1 - полный стек сообщений, для отправки вариант А. Добавьте классы StackNode и Stack, точно такие же, как представлены в модулях. Затем выведите классы MessageNode и MessageStack таким же образом, как мы получили FloatNode и FloatStack в модулях, но при необходимости внесите коррективы, чтобы MessageStack работал с сообщениями. Измените большинство методов с именем showXYZ (), преобразовав их в toString (), чтобы вывод выполнялся клиентом, а не методами. Новые методы просто форматируют строки при подготовке к выходу.
В вашем клиенте, после того как вы выполнили действия из опции А, добавьте код для создания пакета сообщений. Затем поместите() все различные сообщения в стек. Это означает, что некоторые сообщения будут объектами базового класса, а некоторые-объектами производного класса. Но код для их проталкивания (и всплывания) в клиенте один и тот же. Ничего особенного не нужно делать для того, чтобы подтолкнуть один вид сообщения против другого вида. То есть, если вы делаете это правильно, вы просто нажимаете(someMsg) независимо от того, какой вкус сообщения someMsg происходит, и точно так же с хлопком.
Наконец, в цикле, pop() все из MessageStack и распечатать его, как вы pop(). Выйдите за пределы конца стека, чтобы убедиться, что ваш код не ломается, когда вы вытаскиваете() вещи из пустого стека.
При правильной работе этот параметр будет печатать только данные базового класса, поскольку метод toString() не является виртуальным. Вот как это должно быть. Кроме того, создание toString() virtual не поможет этому, поэтому не разочаровывайтесь, если вы все еще не видите производные данные при отображении объектов pop()ped, когда они выходят из стека.

Richard MacCutchan

Я не вижу никакой связи между этим кодом C++ и вашим заданием. Я настоятельно рекомендую вам прочитать эти вопросы еще несколько раз, прежде чем начать думать о написании какого-либо кода.

2 Ответов

Рейтинг:
12

OriginalGriff

Этот код C++ не имеет ничего общего с вашим заданием, и преобразование кода между двумя разными языками и фреймворками в любом случае не приведет к созданию хорошего кода java.

Вместо того чтобы искать ярлыки, сядьте с заданием и прочтите его как последовательность шагов. Подумайте о том, чему вас недавно научили, и это не должно быть трудно. Игнорируйте C и C++ и сосредоточьтесь на своих классах Java, иначе вы не справитесь с этой задачей.


Рейтинг:
1

KarstenK

Домашнее задание-это ваша задача, а спрашивать-это немного похоже на мошенничество, и поэтому вы должны изучить основы, как в этом учебник по java.

Но я скажу вам, что вы не создаете подклассы в java, а создаете для каждого класса собственный java-файл с именем класса.

Для макета класса лучше всего составить список всех задач и подумать, сколько классов полезно для разделения задач и данных. В зависимости от качества вашей домашней работы вы можете рассмотреть некоторые из них Инструмент UML Это не пустая трата времени, но действительно помогает вашей архитектуре. ;-)