Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Маленький тест, :) 
:(
    Опции темы
redrick
Дата 17.8.2004, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 547
Регистрация: 7.1.2004
Где: Москва

Репутация: 3
Всего: 5



да, а ведь точно... я на этом даже както напарывался уже =)


--------------------
Имею Мнение Хрен Оспоришь   
PM MAIL ICQ   Вверх
Domestic Cat
Дата 17.8.2004, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Next:

Нaписать программу, которая, соединившись с сервером 69.64.33.189, из полученного респонса вытянет и напечатает текст самой себя (можно в неформатированном виде) smile.gif


--------------------

PM   Вверх
Domestic Cat
Дата 18.8.2004, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Тут я немного смошенничал smile.gif
Код

//thisIsTheAnswer
import java.io.*;
import java.net.*;

public class Test
{
    public static void main(String [] args) throws Exception
    {
         URL url = new URL("http://forum.vingrad.ru/index.php?showtopic=24799&st=225");
         InputStream content = url.openConnection().getInputStream();
         
         Thread.sleep(10000); // ждем загрузки
         int bytes = content.available();
         byte[] array = new byte[bytes];
         content.read(array);
         
         StringBuffer text = new StringBuffer();
         for (int i = 0; i < bytes; i++)
         {
                text.append((char) arr[i]);
         }
         int i1 = text.indexOf("thisIsTheAnswer");
         int i2 = text.indexOf("theEndOfTheAnswer", i1);
       
         String result = text.substring(i1, i2);
         System.out.println(result);
     }    
} //theEndOfTheAnswer




--------------------

PM   Вверх
redrick
Дата 18.8.2004, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 547
Регистрация: 7.1.2004
Где: Москва

Репутация: 3
Всего: 5



ну знаете =)) ... кстати, а кто может накатать код программы, которая выводит свой сорс, но без всяких коннектов к серверам, и даже без открытия файла - т. е. из IO функций только println используется ?


--------------------
Имею Мнение Хрен Оспоришь   
PM MAIL ICQ   Вверх
Domestic Cat
Дата 18.8.2004, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Код

class Test
{
    static public void main(String[] args)
   {
        String s = "class Test{static public void main(String[] args){String s=; System.out.print(s.substring(0,55)+(char)34+s+(char) 34+s.substring(55));}}";
 System.out.print(s.substring(0,55)+(char)34+s+(char)34+s.substring(55));
   }
}


=)
Ну а если форматирование убрать, то получится в точности она же.

Это сообщение отредактировал(а) Domestic Cat - 18.8.2004, 16:59


--------------------

PM   Вверх
redrick
Дата 18.8.2004, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 547
Регистрация: 7.1.2004
Где: Москва

Репутация: 3
Всего: 5



не проверяю - верю =)
просто в свое время я долго не мог понять как это все работает - не укладывалось в голове : "раз программа выводит сама себя, то то, что она выводит тоже должно быть такой программой и т. д. и получается на вроде бесконечной рекурсии". Софизм основан на том, что данные в программе можно повторно использовать... вроде так =)


--------------------
Имею Мнение Хрен Оспоришь   
PM MAIL ICQ   Вверх
Domestic Cat
Дата 18.8.2004, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Код

import java.io.*;
class Test
{
   static public void main(String[] arguments) throws Exception
   {
       File file = new File("text.txt").getAbsoluteFile();
       FileInputStream fis1 = new FileInputStream (file);
       System.out.println((char)fis1.read()); // 1
       FileInputStream fis2 = new FileInputStream ("text.txt");
       System.out.println((char)fis2.read()); // 2
   }
}


Структура директорий такая:

text.txt
Desktop/ text.txt Test.class

Файл "text.txt" в Desktop содержит текст "1", файл в паренте - "2".
Если я запускаю код из Desktop, я получу:
1
1
Если я запущу код из парентa:

java -Duser.dir=(здесь полный путь)/Desktop/ Test

- что я получу и почему?


--------------------

PM   Вверх
redrick
Дата 18.8.2004, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 547
Регистрация: 7.1.2004
Где: Москва

Репутация: 3
Всего: 5



предполагаю, что так :
Код

1
2


за первый ответ ручаюсь т. к.
Цитата

By default the classes in the java.io package always resolve relative pathnames against the current user directory. This directory is named by the system property user.dir, and is typically the directory in which the Java virtual machine was invoked.


насчет второго только предполагаю (считаю, что VM при создании FileInputStream ищет в директории, откуда была запущена), т. к. в доках не нашел, написано только, что
Цитата

What files are available depends on the host environment


кстати, почему оно будет работать вообще ? VM разве будет искать Test.class и в user.dir ? (считаем, что Desktop в path нет)



--------------------
Имею Мнение Хрен Оспоришь   
PM MAIL ICQ   Вверх
Domestic Cat
Дата 18.8.2004, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



user.dir устанавливает текущую рабочую директорию, так что JVM должна искать там и
на CLASSPATH'е. По идее, и FileInputStream дoлжен читать Desktop/text.txt smile.gif
Но читать он будет второй файл (Bug ID: 4117557).


--------------------

PM   Вверх
redrick
Дата 19.8.2004, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 547
Регистрация: 7.1.2004
Где: Москва

Репутация: 3
Всего: 5



о как =)
да, будем знать, что ещё и в Bug Reports надо заглядывать =) javadoc-ом уже не проживешь =)



--------------------
Имею Мнение Хрен Оспоришь   
PM MAIL ICQ   Вверх
Domestic Cat
Дата 19.8.2004, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Цитата(redrick @ 19.8.2004, 06:44)
о как =)
да, будем знать, что ещё и в Bug Reports надо заглядывать =) javadoc-ом уже не проживешь =)

smile.gif

Код

class A
{
     A()
     {    
            this.show();  
     }
     
      void show()
     {    
            System.out.println("Base Class");    
     }
}

class B extends A
{
      B() { }

      void show()
     {
           System.out.println("Derived Class");
     }
}

public class Test
{
     public static void main(String args[])
     {  
           System.out.println("This is Main");
           new B();
     }
}


Код

#include <iostream>

using namespace std;

class A
{
 public:
 
   A()
   {  
       this->show();  
   }
   
   virtual void show()
   {  
       cout << "Base Class" << endl;  
   }
};

class B : public A
{
 public:
 
   B() {  }
   
   void show()
   {  
       cout << "Derived Class" << endl;  
   }  
};

int main(void)
{
   cout << "This is main" << endl;  
   B test;
}


Вопрос: в чем состоит вопрос?

Это сообщение отредактировал(а) Domestic Cat - 19.8.2004, 22:02


--------------------

PM   Вверх
redrick
Дата 19.8.2004, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 547
Регистрация: 7.1.2004
Где: Москва

Репутация: 3
Всего: 5



с ходу не сообразил, полез в книжки, ну и =)


Java Language Specification
Second Edition
Цитата

Unlike C++, the Java programming language does not specify altered rules for method dispatch during the creation of a new class instance. If methods are invoked that are overridden in subclasses in the object being initialized, then these overriding methods are used, even before the new object is completely initialized. Thus, compiling and running the example:


class Super {
Super() { printThree(); }
void printThree() { System.out.println("three"); }
}




class Test extends Super {
int three = (int)Math.PI;            // That is, 3
public static void main(String[] args) {
  Test t = new Test();
  t.printThree();
}
void printThree() { System.out.println(three); }
}

produces the output:

0
3




т. е. будет

Derived Class


насчет С++ : думаю будет вывод Base Class т. к. там вроде все по человечески и у Стауструпа не оговорено иначе =)




--------------------
Имею Мнение Хрен Оспоришь   
PM MAIL ICQ   Вверх
Domestic Cat
Дата 19.8.2004, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Насколько я понимаю, в C++ нельзя вызвать overridden метод, если объект еще не создан
(как в этом случае - из конструктора). А в Java можно smile.gif


--------------------

PM   Вверх
redrick
Дата 20.8.2004, 04:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 547
Регистрация: 7.1.2004
Где: Москва

Репутация: 3
Всего: 5



ну в общем - насчет Java там все доступно написано в спецификации =)

а насчет С++ - собственно все так и есть, только имхо тут фраза нельзя "вызвать overridden метод" не очень подходит, т. к. фактически он и не пытается вызваться - вызывается метод базового класса.
На мой взгляд это всё таки логичнее : вызывается конструктор базового класса, из него вызывается метод - естественно искать его в этом же классе, тем более, что в этот момент наследник ещё не создан. Хотя с другой стороны создатели Java тоже правы - вроде как дополнительная возможность, но вот нужна ли она ? Ведь они итак навырезали из C++ кучу всего дабы "упорядочить и упростить", да вот не забыли такую заморочку вставить - зачем ?

а вот насчет того, что это совсем нельзя в С++ я не уверен - просто я не знаю с ходу как... можт кто и знает, а может и нельзя =)

Это сообщение отредактировал(а) redrick - 20.8.2004, 04:16


--------------------
Имею Мнение Хрен Оспоришь   
PM MAIL ICQ   Вверх
Domestic Cat
Дата 20.8.2004, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Цитата(redrick @ 19.8.2004, 19:09)
На мой взгляд это всё таки логичнее : вызывается конструктор базового класса, из него вызывается метод - естественно искать его в этом же классе, тем более, что в этот момент наследник ещё не создан. Хотя с другой стороны создатели Java тоже правы - вроде как дополнительная возможность, но вот нужна ли она ?


Хм, для чего? Кажется, вот для чего:

Код


class A
{
   public A()
   {
       initParsers();
       init();
       parseSomeStuff();
   }
   
   initParsers() { ... }
   init() { ... }
   parseSomeStuff() { ... }
}

class C extends A
{
   public C()
   {
       
   }
   
   init() { ... }
   
   parseSomeStuff() { ... }
}



Предположим, я вызываю A():

A() -> a.initParsers() -> a.init() -> a.parseSomeStuff()

Теперь C()

A() -> a.initParsers() -> c.init() -> c.parseSomeStuff() -> C()

Если я все-таки хочу вызвать a.init(), я вставлю super() в c.init().
А если я не хочу его вызвать? Здесь -то все просто, а в C++ нужно что сделать? По-моему, только переписать А, и соответственно, все классы от него наследующие.

//Я тут B класс удалил - он был лишний

Это сообщение отредактировал(а) Domestic Cat - 20.8.2004, 16:10


--------------------

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0687 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.