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

 
 
 
Сообщения: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);
	}

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