Loading...
KatyaMarincheva avatar KatyaMarincheva 572 Точки

[Judge] Могат ли да се submit-ват Java решения съдържащи допълнителен клас в същия файл?

Здравейте, колеги,

Имам следния въпрос:

Току-що си написах решение на задачата Problem 13** – Durts от Homework: Loops, Methods, Classes.

Направила съм си собстевен клас Rectangle, който за разлика от java.awt.Rectangle работи с double values, а не с int. На място при мен минава всички нулеви тестоове, но като го пусна в judge получавам грешка:

Exception in thread "main" java.lang.NoClassDefFoundError: P13_Durts$Rectangle

Т.е. не ми намира класа Rectangle, който си е в същия файл.

Помислих да не би да се чуди дали това е мой class Rectangle или е държавния class Rectangle, смених му името - но грешката не се промени:

Exception in thread "main" java.lang.NoClassDefFoundError: P13_Durts$CustomRectangle

Код

Та въпросът ми е, по принцип възможно ли е judge да приема решение с повече от един клас, всички грубо и грозно в един файл, и ако е възможно - как става?

Не че не мога да го напиша без custom class Rectangle, но ми беше интересно да го напиша така....

Тагове:
0
Java Advanced
RoYaL avatar RoYaL Trainer 6849 Точки

Направи го да не е public просто.

1
KatyaMarincheva avatar KatyaMarincheva 572 Точки

@RoYaL

махнах public, остана: static class Rectangle

после пробвах с private static class Rectangle

При мен все си работи, а в judge грешката е същата:

Exception in thread "main" java.lang.NoClassDefFoundError: P13_Durts$Rectangle

Може ли да идва от факта, че всички решения са ми в package?

Не, и в package-a не е проблема, направих си нов проект Durts, без package - с private static class Rectangle - грешката не се промени:

Exception in thread "main" java.lang.NoClassDefFoundError: Durts$Rectangle

 

0
06/09/2015 14:03:42
RoYaL avatar RoYaL Trainer 6849 Точки

Възможно е. На изпитът по Java на който се явявах преди повече от година ползвах класове. Изрових си кода:

http://pastebin.com/se3aF6Vd

Нямам package, класът ми не е nest-нат вътре в другия клас и също така всичко, което е от тип моя клас е статично.

0
Filkolev avatar Filkolev 4482 Точки

А защо static?

1
RoYaL avatar RoYaL Trainer 6849 Точки

Пробвах и твоя код. Нямаш право и на публичен конструктор явно. Така, че това което направих е да не ползвам конструктор и изнесох като статични двете ти променливи от тип Rectangle (не знам дали е нужно)

http://pastebin.com/cxWPba15

1
KatyaMarincheva avatar KatyaMarincheva 572 Точки

@Filkolev

махнах само static и се счупи: No enclosing instance of type P13_Durts is accessible. (при използване на конструктора в main).

Може да трябва да извикам конструктора сега по друг начин, но в Java още не се сещам как....

0
06/09/2015 14:50:10
KatyaMarincheva avatar KatyaMarincheva 572 Точки

@RoYaL

Вярно, дава 100 точки сега, judge го прочете този път.

Благодаря много!

0
KatyaMarincheva avatar KatyaMarincheva 572 Точки

@RoYaL

Проблемът обаче излиза, че не е бил в конструктра, а точно в изнасянето като статични на двете променливи от тип Rectangle

Само си добавих втори конструктор - с default 0 values за всичко.

решението с public constructor

Judge пак го чете и пак си му дава точките.

 

0
RoYaL avatar RoYaL Trainer 6849 Точки

Проблемът е, че ти можеш да ги изнесеш като типове без да ги инициализираш, и после в мейна да ги инициализираш като ректейнгъли, въпросът е, че тогава ще даде същта грешка. А за да успееш да ги инициализираш като статични поле още горе, ти трябва конструктор с 0 аргумента...

Както би казал японски турист с разговорник в ръка, когато му кажат, че е един дюнер е 18 лв: ебасимамамата, да?

1
KatyaMarincheva avatar KatyaMarincheva 572 Точки

@RoYaL

Преди последния ти коменар пробвах буква по буква точно каквото си написал и стана буква по буква точно каквото си напписал :)

"Проблемът е, че ти можеш да ги изнесеш като типове без да ги инициализираш, и после в мейна да ги инициализираш като ректейнгъли, въпросът е, че тогава ще даде същта грешка. А за да успееш да ги инициализираш като статични поле още горе, ти трябва конструктор с 0 аргумента..."

Туристът е прав :)

Сега си работи де, с допълнителния 0 arguments конструктор и всичко на public в class Rectangle, както и с всичко на private в в class Rectangle.

 

0
KatyaMarincheva avatar KatyaMarincheva 572 Точки

@Filkolev

Прав си, че няма логика да е static - оказва се, че ако искам да не е static класа, и да си има конструктор, този конструктор се извиква по много странен начин:

private static Rectangle vertical = new P13_Durts().new Rectangle();

или само Rectangle vertical = new P13_Durts().new Rectangle(rectVerticalX, rectVerticalY, rectVerticalWidth, rectVerticalHeight);

- ако няма да е за judge.

Благодаря за напомнянето - така научих как се работи с конструктор на non-static class.

0
dgp_82 avatar dgp_82 19 Точки

Имам следния проблем със submit-ването на домашните. 

За да не правя всички задачи на отделни проекти отивам в src-папката  и създавам нов калс за всеки проблем.

Натискам десен бутон на SRC папката -> New -> наименовам си класа и до тук всичко ок. В момента в който започна да пиша кода в новия ллас не ми дава изобщо опция да принтирам System.out.println().

Моля помогнете.

0
Jinjaar avatar Jinjaar 348 Точки

@dgp_82  Чакай малко... сигурен ли си че всичко си правиш като хората? Новият клас който създаваш има ли си main() метод , това което описваш се поучава ако се опиташ да извикаш System.out.println() направо в класа, извикването трябва да се прави в някакъв метод main( ) или твой собствен, иначе няма как да стане.Огледай се добре.

1
dgp_82 avatar dgp_82 19 Точки

Вече всичко е ОК. Благодаря.

0
kosio197 avatar kosio197 104 Точки

Вътрешен клас може да е static или не в зависимост от това за какво ще го ползваш. Когато той не е статичен може да "види"  променливите и методите на горния клас и съответно затова иска да се инициализира от инстанция на горния глас например:

public class Test {
    private class Test1 {
        public void printTest() {
            System.out.println(test);
        }
    }

    public int test;

    public Test(int test) {
        this.test = test;
    }


    public static void main(String[] args) {
        new Test(5).new Test1().printTest();
        new Test(6).new Test1().printTest();
    }

}

В този случай вътрешния клас Test1 ползва променливата test на външния клас и съответно трябва да се конструира от инстанция на външния клас както е направено в мейн метода. Ако в този вид на кода Test1 се направи на static кода няма да се компилира, защото не знае кой точно test да вземе. В случай, че вътрешния клас няма да ползва промеливи/методи на външния клас  по - добре да е static  за да не се налага да се прави от инстанция на външния клас. например класа Test2 тук:

    private static class Test2 {
        public void printTest() {
            System.out.println("test");
        }
    }
    
    private class Test1 {
        public void printTest() {
            System.out.println(test);
        }
    }

    public int test;

    public Test(int test) {
        this.test = test;
    }


    public static void main(String[] args) {
        new Test(5).new Test1().printTest();
        new Test(6).new Test1().printTest();
        
        
        new Test2().printTest();
    }

}

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.