Если не совсем понятно объяснил, то переформулирую - как отправить два параметра из двух разных мест в один метод, чтобы он понял, что число x пришло для первого параметра, а числов y - для второго параметра? Заранее благодарю.
Как же ты ужасно объясняешь. Ты сейчас пытаешься изобрести наследование?
Нет, вроде наследование я пока не изобретаю (если я правильно понял его суть. Смотри пикрил, не знаю, как объяснить ещё понятнее. На нём я показываю, какие две переменные хочу отправить в параметр метода. И я не знаю, как это сделать.
методы имеют доступ ко всем полям класса.
В принципе, тебе не обязательно даже для первого метода передавать параметры,
class resource {
int ore;
int water;
int energy;
int acid;
int temperature;
double stage1_result;
double stage1(){
stage1_result = Math.sqrt(ore * water);
return stage1_result; // это тебе может и не понадобится.
}
double stage2(){
return stage1_result/acid;
}
А почему нельзя просто написать this.acid и this.stage1(res1, res2)? Я на джаве не пишу, но думаю, что это должно работать.
И ты очень странно инициализируешь инстанст класса. Может в джаве это и норма, но выглядит не очень человечески.
Там единственное, для доступа к полям класса могут использоваться всякие резервированные слова типа this, self и т.д. Я на жджаве не пишу, не знаю, как там области видимости устроены.
Основной класс
Переменная один
Переменная джва
Ресурсный класс
Функция один - возвращает переменную
Функция джва - возвращает переменную
Программа
Экземпляр второго класса
Переменная один равна Экземпляр ресурсного класса.Функция один
Переменная джва равна Экземпляр ресурсного класса.Функция джва(Переменная один)
Изи пизи
Во-первых, пока не перепишешь с человекочитаемыми переменными, отвечать больше не буду
Во-вторых, в 37-39 строках ты проебал скобки
В-третьих, в stage2 принимай один параметр, а второй получай как this.acid
Благодарю, анон, но суть задания не в упрощении, а именно в выполнении условия, передачи двух переменных в качестве первого и второго параметра.
>>242562653
>2
Я пробовал так писать, компилятор ругается.
>>242562799
До this я ещё не добрался. Если это делается через this, то ок, вопрос снимается.
>>242562911
В каком плане странно?
>>242563076
Само собой, если бы я писал серьёзную программу, то написал бы нормальные слова. Сейчас мне не хотелось заморачиваться, т.к. программка чисто тренировочная.
Второе - объект ресурс должен иметь внутреннее состояние которым ты можешь управлять через публичные методы, состояние rezult не должно храниться в main
Третье - переменные в твоих методах не нужны, прямо возвращай результат операции.
Четвертое - выучи что такое this.
Пятое - никакого ебаного транслита.
И сделай Статик импорт методов System.out, нахуя столько повторений
>До this я ещё не добрался. Если это делается через this, то ок, вопрос снимается.
this - это указатель на объект. Типа объект типа Resurs должен знать, что он обращается ко своему acid. Т.е. this.acid = part1.acid для part1, для part2 это будет part2.acid. Наверно. Может в джаве есть какие-то нюансы, но во всех языках программирования оно плюс-минус так работает.
Я половины не понял из того, что ты написал. Я верю, что ты бы легко справился с заданием, но повторюсь - я только что добрался до темы "Методы". Если то, о чём я спрашиваю, делается таким тернистым путём, то ок, я просто пока оставлю это на потом. Просто я думал, что всё делается проще, в одну строчку.
Благодарю, анон. Полистал по книжке, this будет через несколько страниц, в принципе, я уловил суть.
ты пытаешься прыгнуть выше головы.
Зачем вгонять себя в фрустрацию не прочитав толком как это делается?
Внутри методов внутри Resource можешь обратиться к переменным экземпляра через this. Их не надо передавать в аргументах метода (в скобках)
И не создавай лишних переменных которые ты используешь 1 раз.
double stageOne (int first, int second){
return Math.sqrt(first, second)
}
На
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
Mat number = new Mat();
double rez = number.Division(5, 10);
Console.WriteLine(rez);
}
}
class Mat
{
public double Division(int a, int b)
{
double c = a / b;
return c;
}
}
}
Пчел. Тормозни прямо сейчас и въедь в ООП, абстрагируясь от джавы. Ты перепридумываешь велосипеды с треугольными колесами и педалями на руле.
>ты пытаешься прыгнуть выше головы.
Зачем вгонять себя в фрустрацию не прочитав толком как это делается?
Мне нужна практика. Ничего лучше не придумал, чем создавать себе вызовы, и пытаться самому же их решить. Знаю, что в инете куча всяких задач. Но многое из того, что я находил, либо совсем элементарно, либо наоборот слишком сложно. И всегда стоит вопрос - я не могу решить задачу, потому что не хватает знаний, или я просто плохо подумал над решением? В данном случае я неооценил сложность поставленной самому себе задачи.
Да, хороший совет. Постараюсь следить за этим.
>>242564923
Дык, как в него въехать без практики? ЧТо толку, что я перечитаю три принципа ООП и определение конструктора, если это нужно всё кодить и практиковать, чтобы оно отложилось?
А можешь скрин консоли ещё выложить, если не трудно? И да, это Java? У меня такое чувство, что это Шарп, который я как-то видел краем глаза.
Так C# - попытка майкрософта сделать свою Java.
>В каком плане странно?
Обычно пользуются конструкторами класса, а не просто перечисляют поля класса.
var res999 = number.division(number.var1,x)
но вообще сама постановка вопроса (передать в метод класса его же переменную) свидетельствует о каком-то структурном дебилизме.
или ты пишешь метод и пользуешься переменными внутри
divideBy(x)
{ return this.var1/x' }
или делаешь статический метод зачем-то.
хуита короче.
>Так C# - попытка майкрософта сделать свою Java.
что характерно, более удачная, чем застрявший в прошлом бюрократический оригинал.
(картинка с фабрик-конструктор-джава-петухами.джипег)
>(картинка с фабрик-конструктор-джава-петухами.джипег)
Ты так пишешь, будто бы шарписты этим не балуются.
>Ты так пишешь, будто бы шарписты этим не балуются.
этим балуются скорее не джависты или шарписты, а кровавые энтерпрайзоры - а там в основном жаба-легаси 20 лет выдержки, которую без пяти абстрактных оберток не переваришь.
я уже давно не в этой всей ойти-хуите, и слава богу - золотые времена разработки позади (QBASIC).
Как и говорили аноны выше, тебе надо разобраться с концепциями ООП. Практически никогда тебе НЕ нужно передавать значения из полей класса этому же классу в методы как аргументы.
В твоём случае - stage1 оперирует полями ore и water. Перепиши метод следующим образом:
double stage1() {
double promivka = Math.sqrt(ore * water);
return promivka;
}
То что переменная тут лишняя - сам потом догадаешься, пока следи за параметрами.
Для твоего метода stage2 - тебе по твоей логике нужен результат метода stage1 и поле acid. Перепиши его следующим образом:
double stage2() {
double stage1result = stage1();
double aciding = stage1result / acid;
return aciding;
}
Если что - просто сформулируй свою задачу, попробую объяснить как просто реализовать это в ООП чтобы ты въехал.
> компилятор ругается.
Как именно ругается? Может проблема в том, что у res2 тип int, а ты попытался передать в него rezult1, у которого тип double? Ругается так: "incompatible types: possible lossy conversion from double to int"?
Благодарю, анон. Всё заработало. Странно, если честно. Я писал вроде так же, но выдавало ошибку.
Ну можешь без сеттера, а просто писать
myMath.divisor = 4;
Но вообще лучше привыкать сеттеры писать
вместо res1 подставляй part1, тип у res1 тогда нужно ставить не int а Resurs это тупой вариант до которого тебе следовало догадаться
но более акатуальный - вообще убираеьш res1 т.к. в функции под this у тебя будет текущий парт у которого вызвали метод stage2, т.е. this==part1, а значит можно будет вызывать part1.stage2(res2)
c третьей стороны у тебя какая-то неоопшная хуйня тк у тебя ресурс это ресурс,у которого есть некие стейдж функции но эти функции не несут смысловой нагрузки и выполняют просто мат операцию а значения ты подаешь тупо в коде хочешь .acid, хочешь .ore т.е. можно в неподходящий по логике стейдж запихнуть не то значение не того элемента ресурса
логично было бы выделить общий элемент ресурс
class ResourceElement {
public int value;
}
а потом наследовать разные типы
class ResourceOre extends ResourceElement {}
class ResourceWater extends ResourceElement {}
тот класс твой Resurs ваще кал какойто - это скорее процесс обработки чего-то с получением ресурса
вот и сделай разные процессы
class ShitBlockResource {}
class ProcessShit {
Resource process(ResourceElement a, ResourceElement b) {
// тут твоя фантазия - при кривых ресурсах можно рожать всякую поеботу
// а если подали говно и воду то выдавать ресурс - говняный кирпич
if(a instanceof ResourceWater && b instanceof ResourceOre)
return new ShitBlockResource(a.value*b.value); // ok
else
return new AtomicBomb();
}
}
или хуй знает что ты хочешь сделать
>А можешь скрин консоли ещё выложить, если не трудно?
Ну шарп, а разница то в чем?
>Ну можешь без сеттера, а просто писать
>myMath.divisor = 4;
>Но вообще лучше привыкать сеттеры писать
а вот и абстрактный жабопетух подвалил
var x = ArithmeticFactory.NewInstance(new NaturalNumber(2), new NaturalNumber(2));
x.InitAbstractProcessing();
x.AddOperation(new PlusOperation());
x.Execute();
x.Finalize();
var y = OutputFactory.Init(x);
y.ProcessOutput(new DvachOutputDevice());
>пук
>как отправить два параметра из двух разных мест в один метод, чтобы он понял, что число x пришло для первого параметра, а числов y - для второго параметра?
ахаха, чё, блядь
>Мааам, смотри, я использую паттерны! Мой код выглядит сложным, а поэтому он супер крутой, да мам?
да, оверинжиниринг классический. неясно, почему ты мне это пишешь, а не ирландскому сеттеру >>242568586
>>242568476
>>242568589
>>242568687
Благодарю за развёрнутые и не очень ответы, аноны. У меня всё заработало. В принципе, я просто переписал строчку из этого поста >>242567278. М.б. я изначально очень хреново сформулировал условия задачи, мне просто требовалось передать одну переменную объекта и вторую переменную не этого объекта в один метод, в качестве параметра. Я вроде бы именно так и написал, как у анона в посте, но компилятор высрал недовольственную простыню на несколько строчек, и я решил, что делается подобное не так прямолинейно. К сожалению, свой прошлый код я уже на 3 раза стёр, поэтому текст сообщения об ошибке воспроизвести не могу. Но возможно анон>>242568543 прав, и я просто проебался с передачей значения не того типа, который был выделен (типо передаётся double, когда у меня стоит int). Всем добра, в общем. Завтра буду по подробнее смотреть эти ваши this, и упражняться уже с ними.
Я желаю тебе успеха, анон. Ты двигаешься в правильном направлении в самообучении, вежливо общаешься, не ведешься на троллинг и токсичность, неплохо формулируешь (для новичка).
Это важно для программиста. Токсичных зазнаек в айти уже выше крыши, их время закончилось. Твои софт-скиллы пригодятся тебе при устройстве на работу больше, чем ты думаешь. Не потеряй их, а this/huis сами выучатся.
Ни пуха ни пера!
>>242567278-краткоанон.