Table of Contents
Correct answer
blank
Home Java Never-ending loop for user-populated array list

Never-ending loop for user-populated array list

Feb 05, 2024 pm 10:00 PM
overflow

Question content

I need to write a method to get the car specifications entered by the user and add them to an arraylist. This needs to accept any number of specifications the user wants to enter, including none. This is my first post here, apologies for any bad grammar.

public static arraylist gettrim() {

scanner t = new scanner(system.in);
system.out.println("enter car trim");
arraylist<string> trim = new arraylist<>();

while (t.hasnext()) {
trim.add(t.next());
}

return trim;

}
Copy after login

I think this condition will return false if a space is entered. Such continuous iteration can only be exited manually.

I also tried it

if (t.hasNext()) {
trim.add(t.next());
}

else {
t.close();
}
Copy after login

This iterates once and returns the arraylist, but I need to be able to enter more. Changing the if or while condition to hasnextline() gives the same result, here I am using hasnext() because the car trim level has specific formatting expectations. I don't understand why hasnext() doesn't return false when no input is given.


Correct answer


It..No.

Think about it. How does a computer differentiate between a user who is thinking about what to type and may leave it until after lunch, and a user who is "done"? Fire up the webcam and do some AI analysis and see if the user looks like they've finished typing?

system.in is not the keyboard. It is the "standard input of the jvm process", default, and at least, if you start your java application from the command line, set it to read from the keyboard. It doesn’t have to be:

java -jar myapp.jar </some/path/to/some/file.txt
Copy after login

Now system.in is read from this file. The process cannot be read from the keyboard.

java -jar myapp.jar </dev/barcodescanner1
Copy after login

Now, presumably whenever you scan a barcode, the java application will receive the barcode just as if you entered the digits of the barcode and pressed "Enter" 1.

This depends on the "source of this input" to the "end". The file ends when the end of the file is reached.

It is impossible for the keyboard to "end" - therefore, .hasnext() cannot return false.

blank

You talked about "entering spaces" in your comments.

Then you don’t understand scanner. You are in good company; this is probably the most misunderstood thing. If we look at the number of questions flooding stackoverflow, this is indeed the case.

scanner has nothing to do with the keyboard.

The scanner simply takes any text input source and splits it into chunks. Blocks are called "tokens", and "tokens" are defined by "all text between delimiters". Delimiters are in turn defined by regular expressions, the regular expression used by default is

\s . For example, any amount of white space.

therefore:

public static void main(string[] args) {
  scanner s = new scanner(system.in);
  while (true) {
    system.out.println("token: ≥" + s.next()) + "≤");
  }
}
Copy after login

If you run this command and type in the command line:

hello world!, then press enter and type my name is lajos, you will see:

token: ≥hello≤
token: ≥world!≤
token: ≥my≤
token: ≥name≤
token: ≥is≤
token: ≥lajos≤
Copy after login

Things about the scanner:

It is not possible to register or otherwise obtain the content of anything under "separator". You can't ask the scanner: How many blanks are there?

You also can't ask: "stop" when you encounter a space. No, spaces just separate one token from the next. For scanners, there is no

any difference between pressing the enter key and pressing the space bar and then the enter key. This is all "1 or more whitespace characters" so are interchangeable and cannot be detected since this is about delimiters.

You may not want to use a scanner at all. system.in itself can certainly differentiate it.

Solution 1

A common strategy is to mention some magic word that means "done" in the prompt. For example:

static void main(string[] args) throws exception {
  var s = new scanner(system.in);
  system.out.println("welcome to the fruit stand! enter the fruit you'd like to buy, one at a time:");

  var basket = new arraylist<string>();
  while (true) {
    system.out.print("fruit (type 'done' when done): ");
    string fruit = s.next();
    if (fruit.equalsignorecase("done")) break;
    basket.add(fruit);
  }

  system.out.println("here's your basket: " + basket);
}
Copy after login

Solution 2

Trench Scanner. Or at least, drop everything and just use

nextline, which interacts very with all the other methods it has - choose one and only one (nextline, or Everything except nextline):

static void main(string[] args) throws exception {
  var s = new scanner(system.in);
  system.out.println("welcome to the fruit stand! enter the fruit you'd like to buy, one at a time:");

  var basket = new arraylist<string>();
  while (true) {
    system.out.print("fruit (enter when done): ");
    string fruit = s.nextline();
    if (fruit.isempty()) break;
    basket.add(fruit);
  }

  system.out.println("here's your basket: " + basket);
}
Copy after login

[1] In fact, most barcode scanners look and act like keyboards, and have no device because it does not exist in

/dev/ and cannot be piped into such a process. But, as an example, it works.

You can try this:

public static ArrayList getTrim() {

Scanner t = new Scanner(System.in);
System.out.println("Enter car trim");
ArrayList<String> trim = new ArrayList<>();

while (t.hasNext()) {

if (!t.next().trim().equals("") {

trim.add(t.next());
      }

else {
t.close();
      }
   }

return trim;

}
Copy after login

The above is the detailed content of Never-ending loop for user-populated array list. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Is H5 page production a front-end development? Is H5 page production a front-end development? Apr 05, 2025 pm 11:42 PM

Yes, H5 page production is an important implementation method for front-end development, involving core technologies such as HTML, CSS and JavaScript. Developers build dynamic and powerful H5 pages by cleverly combining these technologies, such as using the &lt;canvas&gt; tag to draw graphics or using JavaScript to control interaction behavior.

How to customize the resize symbol through CSS and make it uniform with the background color? How to customize the resize symbol through CSS and make it uniform with the background color? Apr 05, 2025 pm 02:30 PM

The method of customizing resize symbols in CSS is unified with background colors. In daily development, we often encounter situations where we need to customize user interface details, such as adjusting...

Why are the inline-block elements misaligned? How to solve this problem? Why are the inline-block elements misaligned? How to solve this problem? Apr 04, 2025 pm 10:39 PM

Regarding the reasons and solutions for misaligned display of inline-block elements. When writing web page layout, we often encounter some seemingly strange display problems. Compare...

How to use the clip-path attribute of CSS to achieve the 45-degree curve effect of segmenter? How to use the clip-path attribute of CSS to achieve the 45-degree curve effect of segmenter? Apr 04, 2025 pm 11:45 PM

How to achieve the 45-degree curve effect of segmenter? In the process of implementing the segmenter, how to make the right border turn into a 45-degree curve when clicking the left button, and the point...

How to control the top and end of pages in browser printing settings through JavaScript or CSS? How to control the top and end of pages in browser printing settings through JavaScript or CSS? Apr 05, 2025 pm 10:39 PM

How to use JavaScript or CSS to control the top and end of the page in the browser's printing settings. In the browser's printing settings, there is an option to control whether the display is...

The latest price of Bitcoin in 2018-2024 USD The latest price of Bitcoin in 2018-2024 USD Feb 15, 2025 pm 07:12 PM

Real-time Bitcoin USD Price Factors that affect Bitcoin price Indicators for predicting future Bitcoin prices Here are some key information about the price of Bitcoin in 2018-2024:

How to achieve segmentation effect with 45 degree curve border? How to achieve segmentation effect with 45 degree curve border? Apr 04, 2025 pm 11:48 PM

Tips for Implementing Segmenter Effects In user interface design, segmenter is a common navigation element, especially in mobile applications and responsive web pages. ...

How to compatible with multi-line overflow omission on mobile terminal? How to compatible with multi-line overflow omission on mobile terminal? Apr 05, 2025 pm 10:36 PM

Compatibility issues of multi-row overflow on mobile terminal omitted on different devices When developing mobile applications using Vue 2.0, you often encounter the need to overflow text...