Дъявольские потоки!!!!

 
 
 
Сообщения:3
Изучать JAVA начал недавно. У меня JBuilder X. Затуп такой:
1. Надо из консоли прочитать число типа double методом класса DataInputStream - readDouble(), читать то он читает только не то что нужно вот мой код:
double b = 0;// инициализируем нулём
DataInputStream DIN = new DataInputStream(System.in);
try {
b = DIN.readDouble();// читаем и...
// смотрю в watcher'е а там фигня полная, вывожу System.out.print'ом - одна фигня числа левые :evil: 
}
catch (IOException EX) {
// пока не обрабатываем
}

2. Можно ли определить свой поток типа InputStream чтобы не использовать System.in, ведь InputStream-абстрактный?
 
 
Сообщения:3874


import java.io.*;
import java.util.*;
import java.text.*;


public class UserInput {

        
        public UserInput() { };

        // prompts the specified String to the screen, without end-of-line
        public static void prompt (String s) {

                System.out.print(s + " ");
                System.out.flush();

        } // end prompt()


        // reads the user's answer and returns it as a char
        public static char readChar() {

                char returnValue = 'a';
                DataInputStream dis = new DataInputStream(System.in);

                try {
                        String userInput = new String(dis.readLine());
                        returnValue = userInput.charAt(0); //return just the first character 
                                
                }
                catch(Exception e) {
                        System.out.println("Exception while reading user's input as a char");    
                }

        return returnValue;
        } // end readChar()


        // reads the user's answer and returns it as a String
        public static String readString() {

                DataInputStream dis = new DataInputStream(System.in);
                String userInput = null;

                try {
                        userInput = new String(dis.readLine());
                                
                }
                catch(Exception e) {
                        System.out.println("Exception while reading user's input as a String");  
                }

        return userInput;
        } // end readString()



        // reads the user's answer and returns it as a short
        public static short readShort() {

                short returnValue = 0;
                DataInputStream dis = new DataInputStream(System.in);

                try {
                        String userInput = new String(dis.readLine());
                        returnValue = (java.lang.Short.valueOf(userInput)).shortValue();
                                
                }
                catch(Exception e) {
                        System.out.println("Exception while reading user's input as a short");   
                }

        return returnValue;
        } // end readShort()


        // reads the user's answer and returns it as an int
        public static int readInt() {

                int returnValue = 0;
                DataInputStream dis = new DataInputStream(System.in);

                try {
                        String userInput = new String(dis.readLine());
                        returnValue = (java.lang.Integer.valueOf(userInput)).intValue();
                                
                }
                catch(Exception e) {
                        System.out.println("Exception while reading user's input as an int");    
                }

        return returnValue;
        } // end readInt()


        // reads the user's answer and returns it as a float
        public static float readFloat() {

                float returnValue = 0;
                DataInputStream dis = new DataInputStream(System.in);

                try {
                        String userInput = new String(dis.readLine());
                        returnValue = (java.lang.Float.valueOf(userInput)).floatValue();
                                
                }
                catch(Exception e) {
                        System.out.println("Exception while reading user's input as a float");   
                }

        return returnValue;
        } // end readFloat()


        // reads the user's answer and returns it as a double
        public static double readDouble() {

                double returnValue = 0;
                DataInputStream dis = new DataInputStream(System.in);

                try {
                        String userInput = new String(dis.readLine());
                        returnValue = (java.lang.Double.valueOf(userInput)).doubleValue();
                                
                }
                catch(Exception e) {
                        System.out.println("Exception while reading user's input as a double");  
                }

        return returnValue;
        } // end readDouble()


        // this method reads the user's answer and returns it as a long
        public static long readLong() {

                long returnValue = 0;
                DataInputStream dis = new DataInputStream(System.in);

                try {
                        String userInput = new String(dis.readLine());
                        returnValue = (java.lang.Long.valueOf(userInput)).longValue();
                                
                }
                catch(Exception e) {
                        System.out.println("Exception while reading user's input as a long");    
                }

        return returnValue;
        } // end readLong()

/*      
        // main class, used to test the various methods
        public static void main(String[] argv) {

                prompt("Enter int: ");
                int tempint = readInt();
                System.out.println("Read int: " + tempint);

                prompt("Enter double: ");
                double tempdouble = readDouble();
                System.out.println("Read double: " + tempdouble);

                prompt("Enter char: ");
                char tempchar = readChar();
                System.out.println("Read char: " + tempchar);

                prompt("Enter String: ");
                String tempString = readString();
                System.out.println("Read String: " + tempString);

                prompt("Enter short: ");
                short tempshort = readShort();
                System.out.println("Read short: " + tempshort);

                prompt("Enter long: ");
                long templong = readLong();
                System.out.println("Read long: " + templong);

                prompt("Enter float: ");
                float tempfloat = readFloat();
                System.out.println("Read float: " + tempfloat);


        } // end main()
*/

} // end class
 
 
Сообщения:3
Спасибо, работает, значит преобразование типов, оригинально! А можно ли как нибудь всё таки воспользоваться методом readDouble() класса DataInputStream, а если нельзя то почему? И повторю второй вопрос: Как инициализировать свой 'входной' поток класса InputStream (операция new не хочет выделять память под абстрактный класс).
 
 
Сообщения:3874
QUARTZ:
И повторю второй вопрос: Как инициализировать свой 'входной' поток класса InputStream (операция new не хочет выделять память под абстрактный класс).

InputStream это абстрактый тип, его наследуют все другие стримы (DataInputStream, ByteArrayInputStream и т.д.) их и нужно создавать ...

Если вы хотите создать свой поток, создайте новый класс, наследуйте его от InputStream и реализуйте все абстрактные методы.


QUARTZ:
А можно ли как нибудь всё таки воспользоваться методом readDouble() класса DataInputStream, а если нельзя то почему?


Вообще, метод readDouble() используется не для этого, он используется в паре с методом writeDouble() для записи/чтения структурированных данных в поток.
 
 
Сообщения:3
В принципе я так и думал :lol:. Огромное спасибо за такие быстрые и нужные ответы.
 
 
Сообщения:1688
В Java 1.5 есть замечательный класс java.util.Scanner, кот. уже реализует нужную Вам функциональность:
import java.util.Scanner;

public class InputScanner {

        public static void main(String[] args) {
                Scanner scanner = new Scanner(System.in);
                System.out.print("Input double value: ");
                while (!scanner.hasNextDouble()) {
                        System.out.print("Input double value: ");
                        scanner.next();
                }
                double d = scanner.nextDouble();
                System.out.println("You have entered this value -> " + d);
        }

}
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет