Обычная версия
Java форум JavaTalks
форум программистов

Поиск   Пользователи   Группы   Регистрация 
 Профиль   Личные сообщения 

 Вход 

передать boolean в Main
Список форумов
 ->  Основы языка Java


 
Начать новую тему 
Предыдущая тема :: Следующая тема  
Автор Сообщение
pozitiv : 6
Новичок

СообщениеЯнв 30, 2012 23:26 
Ответить с цитатой
всем привет!
я новичок. Вот столкнулся с проблемой.
есть два класса. мейн и второй, работа с файлами.

обратить внимание на переменную correct

Main
Код:
public class Main {

   
    public static void main(String[] args) {
       
            String fileName="H:\\Java\\test\\filewhere2find.txt";
            boolean correct=true;
            FileWork.checkCorrect(fileName,correct);
            if (correct) {
               //do smth
            }else   FileWork.print("Файл не найден или ошибка чтения");

    }
}

и:
Код:
import java.io.*;

public class FileWork {

    public static void print(String s) {
      System.out.println(s);
    }
   
    public static void checkCorrect(String fileName,boolean b1) {
        File fl = new File(fileName);
        if (fl.canRead()) {
            System.out.println("it is all ok, file is readable");
        }else {
            b1=false;
        }
    }

}


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


Понимаю, что архитектурная ошибка. Подскажите как правильно решать данные вопросы.

Хочу вот что: если во время проверки обнаруживается что файла такого нет, или что-то с ним не так, чтоб передавался аргумент correct как ложь. Это реально?
К началу Посмотреть профиль Отправить личное сообщение
time2die : 49
Новичок

СообщениеЯнв 30, 2012 23:45 
Ответить с цитатой
1) если мне не изменяет память примитивы передаются по значению
2) почему функция не может возвращать boolen ?
К началу Посмотреть профиль Отправить личное сообщение
pozitiv : 6
Новичок

СообщениеЯнв 30, 2012 23:50 
Ответить с цитатой
такс. немного почитал. переписал, но есть проблема. смотрим:

Код:
 public boolean isCorrect(String fileName) {
        File fl = new File(fileName);
        if (fl.canRead()) {
            System.out.println("it is all ok, file is readable");
            return true;
        }else return false;
   }


теперь ошибка в мейне:
Код:
 public void main(String[] args) {
       
            String fileName="H:\\Java\\test\\filewhere2find.txt";
            if(FileWork.isCorrect(fileName)) {
              FileWork.getINFO(fileName);
            }else   FileWork.print("Файл не найден. Oшибка чтения");

    }


if(FileWork.isCorrect(fileName))
компил пишет:
non-static method isCorrect(java.lang.String) cannot be referenced from a static context
К началу Посмотреть профиль Отправить личное сообщение
мсье клоц : 563
Постоянный посетитель

СообщениеЯнв 30, 2012 23:57 
Ответить с цитатой
Ну так забыли же static.
time2die писал(а):
1) если мне не изменяет память примитивы передаются по значению

Вообще, всегда передаётся копия переменной.
К началу Посмотреть профиль Отправить личное сообщение
Skipy : 4805
Я тут живу!
Откуда: Москва, Россия

СообщениеЯнв 31, 2012 11:28 
Ответить с цитатой
мсье клоц писал(а):
Ну так забыли же static.
time2die писал(а):
1) если мне не изменяет память примитивы передаются по значению

Вообще, всегда передаётся копия переменной.


Это можно неправильно понять - если переменная объект, то передается копия объекта. А на самом деле передается копия ссылки на объект, а переменная - объект! - передается по ссылке.

Так что исходное утверждение было правильным. В методы примитивы передаются по значению, объекты по ссылке. При вызове удаленных методов через RMI объекты также передаются по значению (для этого они должны быть сериализуемыми), кроме Remote, которые передаются по ссылке.
_________________
С уважением,
Евгений aka Skipy
www.skipy.ru
P.S. Я НЕ решаю задачи ЗА других!
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
мсье клоц : 563
Постоянный посетитель

СообщениеЯнв 31, 2012 13:40 
Ответить с цитатой
Skipy писал(а):


Это можно неправильно понять - если переменная объект, то передается копия объекта. А на самом деле передается копия ссылки на объект, а переменная - объект! - передается по ссылке.
Простите, что? Вы хотите сказать, что reference variables содержат и объект, и ссылку на него, но передаётся только ссылка?

Вообще, на сколько мне известно, java работает с двумя типами данных: reference type и primitive type.

Если переменная не примитивного типа, то передаётся копия этой переменной (хотя тут действительно впору уличить меня в неточной формулировке и заметить, что переменная тут вообще не при чем, а передаётся копия значения, что в ней содержится). Сама же переменная содержит не объект, а ссылку на него. Что тут можно неправильно понять?
К началу Посмотреть профиль Отправить личное сообщение
aleksandy : 1077
Завсегдатай

СообщениеФев 01, 2012 5:35 
Ответить с цитатой
мсье клоц писал(а):
Сама же переменная содержит не объект, а ссылку на него. Что тут можно неправильно понять?

Вот это оно самое и есть.
Для большинства выражение
Код:
Object x = new Object();
означает, что в x находится объект типа Object, а не ссылка на него.
К началу Посмотреть профиль Отправить личное сообщение
 
Начать новую тему  Ответить на тему
Страница 1 из 1
Список форумов
 -> Основы языка Java


 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru