Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Java > How can I read from the entire standard input at once?

Reply
Thread Tools

How can I read from the entire standard input at once?

 
 
Chad
Guest
Posts: n/a
 
      09-28-2011
The following code is a stripped down version of a large project. The
question is why do I have to press ctrl z every time to get the
output? That is, say I type the following at the command line

1 - 3

and then press the enter key on my keyboard. I press ctrl z and I get
'The value is 1' . Then I press it again, I get a 'The value is '.
Then I press it again, I get 'The value is -', etc. Ideas on how to
get how get the entire output out at once? Ideally what I would like
to do is when I type in the above, press the enter key, then, after I
press ctrl z, get

The value is 1
The value is
found the minus sign
The value is 3


import java.util.Scanner;

public class hack {

public static int getNextNumber(String [] storeValues) {
String value = null;
int i = 0;
Scanner input = new Scanner(System.in);

while(input.hasNextLine()) {

try {
storeValues[i++] = input.nextLine();
} catch (IllegalStateException e) {
return -1; //EOF
}
}

return 0;
}

public static void main(String[] args) {
String[] values = new String[100];

char[] getNumber;
int value;
int i = 0;
while ( ( value = getNextNumber(values) ) != -1) {
getNumber = values[0].toCharArray();
switch (value) {
case 0: {
System.out.println("The value is " + getNumber[i]);
i++;
break;
}
case '+': {
System.out.println("found plus sign");
i++;
break;
}
case '-': {
System.out.println("found minus sign");
i++;
break;
}
case '*': {
System.out.println("found mult sign");
i++;
break;
}
case '/': {
System.out.println("found division sign");
i++;
break;
}
default: break;
}
}//end while

}//end main()
 
Reply With Quote
 
 
 
 
Eric Sosman
Guest
Posts: n/a
 
      09-28-2011
On 9/27/2011 9:34 PM, Chad wrote:
> The following code is a stripped down version of a large project. The
> question is why do I have to press ctrl z every time to get the
> output? That is, say I type the following at the command line
>
> 1 - 3
>
> and then press the enter key on my keyboard. I press ctrl z and I get
> 'The value is 1' . Then I press it again, I get a 'The value is '.
> Then I press it again, I get 'The value is -', etc. Ideas on how to
> get how get the entire output out at once? Ideally what I would like
> to do is when I type in the above, press the enter key, then, after I
> press ctrl z, get
>
> The value is 1
> The value is
> found the minus sign
> The value is 3


Is this a serious question, or are you trolling? Benefit of
the doubt ...

> import java.util.Scanner;
>
> public class hack {
>
> public static int getNextNumber(String [] storeValues) {
> String value = null;
> int i = 0;
> Scanner input = new Scanner(System.in);
>
> while(input.hasNextLine()) {
>
> try {
> storeValues[i++] = input.nextLine();
> } catch (IllegalStateException e) {
> return -1; //EOF
> }
> }
>
> return 0;
> }


A few observations about this method. First, every time it's
called it creates a brand-new Scanner reading System.in. If you
call it twelve times you've got twelve Scanners all fighting
over the same input source. I'm too revolted by the idea to spend
time figuring out how the Scanners resolve their squabbles; it's
like asking whether the tapeworms are more likely to exit the
terminus of your gut head- or tail-first. I prefer not to know.

Second, and take note of this in relation to the subsequent
switch statement, this method returns either 0 or -1. Nothing else,
not ever.

Third, the getNextNumber name is not at all descriptive of what
the method does. You might as well have called it getLost.

> public static void main(String[] args) {
> String[] values = new String[100];
>
> char[] getNumber;
> int value;
> int i = 0;
> while ( ( value = getNextNumber(values) ) != -1) {


Since the method returns either 0 or -1, we know that if the
program reaches this point we have `value' equal to 0.

> getNumber = values[0].toCharArray();


Why? Have you never heard of String's charAt method?

> switch (value) {
> case 0: {
> System.out.println("The value is " + getNumber[i]);
> i++;
> break;


The switch statement selects this case every time. The first time
around, it prints the first character (if there is one) of the first
String (if there is one) read by the first Scanner, and ignores all the
rest of the first String and any additional Strings the Scanner may
have produced. The second time, it prints the second character (if there
is one) of the first String (if there is one) read by the second Scanner
(if it's able to read at all), ignoring all the rest of the input. The
third time it outputs the third character of the third Scanner's first
String, then the fourth time, ...

> }


Since `value' is zero, the remainder of the switch is irrelevant:
None of it can ever be executed.

> case '+': {
> System.out.println("found plus sign");
> i++;
> break;
> }
> case '-': {
> System.out.println("found minus sign");
> i++;
> break;
> }
> case '*': {
> System.out.println("found mult sign");
> i++;
> break;
> }
> case '/': {
> System.out.println("found division sign");
> i++;
> break;
> }
> default: break;
> }
> }//end while
>
> }//end main()


The more I think about it, the more I think giving you the benefit
of the doubt may have been foolhardy. Eleven to two you're trolling.

--
Eric Sosman
http://www.velocityreviews.com/forums/(E-Mail Removed)d
 
Reply With Quote
 
 
 
 
Roedy Green
Guest
Posts: n/a
 
      09-28-2011
On Tue, 27 Sep 2011 22:39:07 -0400, Eric Sosman
<(E-Mail Removed)> wrote, quoted or indirectly quoted
someone who said :

> or are you trolling?


what made you suspect that?
--
Roedy Green Canadian Mind Products
http://mindprod.com
It should not be considered an error when the user starts something
already started or stops something already stopped. This applies
to browsers, services, editors... It is inexcusable to
punish the user by requiring some elaborate sequence to atone,
e.g. open the task editor, find and kill some processes.

 
Reply With Quote
 
Eric Sosman
Guest
Posts: n/a
 
      09-29-2011
On 9/28/2011 12:25 PM, Roedy Green wrote:
> On Tue, 27 Sep 2011 22:39:07 -0400, Eric Sosman
> <(E-Mail Removed)> wrote, quoted or indirectly quoted
> someone who said :
>
>> or are you trolling?

>
> what made you suspect that?


"Chad" has been around on this and other forums for several
years. If s/he has that much experience with programming -- even if
all s/he's done is Turtle Graphics -- the depth of incomprehension
evidenced by the offered code is beyond my ability to accept at face
value.

Of course, it might be a new "Chad." Hence the benefit of the
doubt, and the answer pointing out (some of) the problems.

--
Eric Sosman
(E-Mail Removed)d
 
Reply With Quote
 
Chad
Guest
Posts: n/a
 
      09-29-2011
On Sep 28, 5:58*pm, Eric Sosman <(E-Mail Removed)> wrote:
> On 9/28/2011 12:25 PM, Roedy Green wrote:
>
> > On Tue, 27 Sep 2011 22:39:07 -0400, Eric Sosman
> > <(E-Mail Removed)> *wrote, quoted or indirectly quoted
> > someone who said :

>
> >> or are you trolling?

>
> > what made you suspect that?

>
> * * *"Chad" has been around on this and other forums for several
> years. *If s/he has that much experience with programming -- even if
> all s/he's done is Turtle Graphics -- the depth of incomprehension
> evidenced by the offered code is beyond my ability to accept at face
> value.
>
> * * *Of course, it might be a new "Chad." *Hence the benefit of the
> doubt, and the answer pointing out (some of) the problems.
>


Eric beat me to the explanation. But there is a little bit more to the
story. Over the years both me and Eric have gone back on forth on
comp.lang.c, comp.unix.programmer, and a few other places. Anyways,
I've gone on record several times as saying that I'm "bit slow". In
real life I'm just some seasonal blue collar factory worker. Usually I
just sit around the house and drink after they lay me off for the
season.

However, maybe like a year ago, I started to take some programming
classes at the local extension. It was either that, or spend another
year drinking myself sober. Now the question I posted in here is
actually part of a school project.

Chad
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: How include a large array? Edward A. Falk C Programming 1 04-04-2013 08:07 PM
FAQ 5.29 How can I read in an entire file all at once? PerlFAQ Server Perl Misc 0 01-26-2011 05:00 AM
Can't read this entire story on shutterbug.net? This Old Man Digital Photography 1 12-12-2003 12:38 AM
Can't read entire record - fscanf (choked up) Blankdraw C Programming 2 08-27-2003 02:28 PM



Advertisments