Scanner nextdouble java ошибка

import java.util.*;

class Averager
{
    public static double unlimited()
    {
        int count = 0;
        double sum = 0;
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext())
        {
            double d = scan.nextDouble();
            sum += d;
            count++;
        }
        double ave = sum/count;
        return ave;
    }

    public static void main(String[] args) {
        System.out.println(unlimited()+"\n");
    }
}

There is no error when I use integers but if I use numbers with point in it a error appears.

$ javac Averager.java; java Averager
0.5
Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:840)
    at java.util.Scanner.next(Scanner.java:1461)
    at java.util.Scanner.nextDouble(Scanner.java:2387)
    at Averager.unlimited(Averager.java:12)
    at Averager.main(Averager.java:21)

To my best understanding 0.5 should be covered by double. If not please can someone correct me.

import java.util.*;

class Averager
{
    public static double unlimited()
    {
        int count = 0;
        double sum = 0;
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext())
        {
            double d = scan.nextDouble();
            sum += d;
            count++;
        }
        double ave = sum/count;
        return ave;
    }

    public static void main(String[] args) {
        System.out.println(unlimited()+"\n");
    }
}

There is no error when I use integers but if I use numbers with point in it a error appears.

$ javac Averager.java; java Averager
0.5
Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:840)
    at java.util.Scanner.next(Scanner.java:1461)
    at java.util.Scanner.nextDouble(Scanner.java:2387)
    at Averager.unlimited(Averager.java:12)
    at Averager.main(Averager.java:21)

To my best understanding 0.5 should be covered by double. If not please can someone correct me.

I’m a really new programmer and I’ve been practicing to get better. I hate to ask for help with what I’m sure is a juvenile question for a class, but I cant figure it out.The error it gives is this: It gives me this error : Lab7d.java:28: error: cannot find symbol newArray[i] = scan.nextDouble(). Thanks!

import java.util.Scanner;
import java.util.Arrays;

public class Lab7d {
   public static void main (String[] args){

      // Lab7d, [Naqeeb Nazir], [Masc 1555]

      Scanner scan = new Scanner(System.in);
      int numInputs = scan.nextInt();


      double[] quakes = new double[numInputs];
      quakes = init(numInputs, scan.nextDouble());


      getMagnitudeStats(quakes);


      print(quakes);

      }


      public static double[] init(int a, double n) {
       double[] newArray = new double[a];
       for (int i = 0; i < n; i++) {
        newArray[i] = scan.nextDouble();
          }
          return newArray;
      }


       public static void getMagnitudeStats(double[] myArray) {
         double Maximum = 0.0;
         double Minimum = 0.0;
         double Average = 0.0;
         int severeEarthquakes = 0;

         if (Minimum > 0 && Minimum <= 10.0) Minimum = myArray[0];
         else Minimum = 1.0;

         if (Maximum > 0 && Maximum <= 10.0) Maximum = myArray[0];
         else Maximum = 1.0;




         System.out.println("Maximum: " + Maximum);
         System.out.println("Minimum: " + Minimum);
         System.out.println("Average: " + Average);
         System.out.println("Severe earthquakes: " + severeEarthquakes);


         }



      public static void print(double[] myArray1) {
         for (int i = 0; i < myArray1.length; i++) {
            System.out.print(myArray1[i] + " ");
            }
            System.out.println("");
         }

   }

asked Nov 28, 2015 at 4:15

BorntoCode's user avatar

2

scan is a local variable in main, you can’t access it in init() here newArray[i] = scan.nextDouble();

answered Nov 28, 2015 at 4:29

Ramanlfc's user avatar

RamanlfcRamanlfc

8,2831 gold badge18 silver badges24 bronze badges

Your scan variable is defined in main(), but you are trying to access it in init(). That is why you get error: cannot find symbol.

You can make scan an instance variable and declare it outside the main() method.

Or do the following to create scan in init():

public static double[] init(int a, double n) {
   Scanner scan = new Scanner(System.in);
   double[] newArray = new double[a];
   for (int i = 0; i < n; i++) {
    newArray[i] = scan.nextDouble();
      }
      return newArray;
  }

answered Nov 28, 2015 at 4:29

Atri's user avatar

AtriAtri

5,5215 gold badges30 silver badges40 bronze badges

3

Company

Блок 1. Раздел 2. Тема 1.

В этой теме мы научимся считывать в программу числа, которые пользователь вводит с клавиатуры. Мы сможем попросить пользователя ввести любые данные, а потом правильно на них отреагировать. В будущем совершенно аналогично чтению с клавиатуры класс Scanner можно будет использовать, чтобы читать текст из файлов и из каналов интернет-связи.

Когда вы записали в переменную число, вы можете делать с ним всё что угодно. Это мог быть ответ человека на вопрос теста типа «Сколько будет 7*7?» Это мог быть ответ на вопрос типа «Выберите первое, второе или третье действие», и программа выполнит выбранное действие. Это могли быть входящие данные типа «Введите значение скорости поезда и длину пути, и программа ответит вам, когда он прибудет в такой-то город». Это бывает нужно постоянно – программы считывают данные от пользователей, и ввод данных с клавиатуры просто необходим.

В целом раздел 2 будет посвящен считыванию данных с клавиатуры и оператору if, с помощью которого можно будет указать «если верно условие, то делать то-то». Также мы пройдём, какие для этого оператора бывают логические условия, узнаем альтернативу оператору «если» — switch. На основе этих инструментов мы сделаем программу-тест и калькулятор.

Считывание чисел, слов, данных с клавиатуры или из файла часто называют сканированием, поэтому в Java за сканирование отвечает класс Scanner. Рассмотрим код:

// Сравните 2 строчки кода:
// объявить x типа int и приравнять числу 10
int x = 10;  
// объявить myscan класса Scanner и приравнять новому Сканеру
Scanner myscan = new Scanner (System.in); 

// Как видите, наш класс очень похож на тип int. 
// На самом деле, класс - это просто набор данных в одном названии.

Сравните эти две строчки кода. Первая строчка гласит:

int x = 10; 
// Объявить переменную типа int с именем x, равную начальному значению 10. 

Scanner myscan = new Scanner (System.in); 
/* Объявить объект класса Scanner с именем myscan, равный новому сканеру с параметром System.in */

Это очень похожие вещи. Сначала мы указываем имя класса Scanner, точно также как обычно мы указываем имя типа int. После этого идет новое имя – мы называем конкретное целое число именем x, и называем конкретный сканер именем myscan.

После знака равно идет начальное значение – для переменной это просто 10, а вот для сканера мы должны использовать new. Этот оператор означает «создать новый» или более точно «заказать память под новый объект». На самом деле, при объявлении переменной под неё тоже заказывается память, но здесь памяти требуется больше и поэтому мы заказываем память явно именем new. После new идет имя класса, под который нужно заказать память – мы хотим сканер и указываем Scanner. В скобках идут уточняющие параметры – какой именно сканер.

В данном случае указываем параметром System.in. Это поток ввода текста с клавиатуры. In – с английского ввод, out – с английского вывод. System.out – поток вывода текста на экран. System.in – поток ввода текста с клавиатуры. Слово поток просто значит, что он считывает не одну клавишу, а последовательность нажатых клавиш.

В общем случае это выглядит так:

Scanner имя = new Scanner (System.in);

Чтобы Java нашла класс Scanner, нужно его импортировать в проект или проще говоря включить. Это делается управляющей строчкой, поставьте её выше main в самом верху своего кода сразу после самой первой строчки package:

import java.util.Scanner;  // в начале кода после package 

Так мы включаем для себя класс Scanner. Так же мы всегда будем подключать и другие библиотеки, классы и вообще возможности.

Когда не знаете, что импортировать для того или иного класса, просто забейте в гугл «Java имя_класса import» и быстро найдете результат. Также все стандартные классы Java описаны в официальной документации, например, класс Scanner и все его функции описаны тут — https://docs.oracle.com/javase/10/docs/api/java/util/Scanner.html

Среда разработки также подсказывает, что нужно импортировать для того или иного класса — нажмите на покрасневшее имя нового класса правой кнопкой мыши, и выберите «импортировать класс». Так строчка импорта появится сама собой. В некоторых средах разработки конкретные кнопки отличаются, но суть та же.

Объявив переменную х, мы можем дальше ей пользоваться. Так и теперь, объявив объект myscan, мы можем его использовать, чтобы читать данные с клавиатуры. Например, «считать следующее целое» (по-английски «next int») будет так:

int x = myscan.nextInt ();

// Расшифровка: 
// int x = число, считанное с клавиатуры; 
// объявить целое y, равное результату функции nextInt.

Здесь мы запускаем функцию nextInt () для объекта myscan. Точка между ними означает принадлежность nextInt к myscan. Круглые скобки как и всегда для функций означают «выполнить функцию с данным именем».

Функция nextInt класса Scanner считывает цифры, вводимые с клавиатуры и преобразует их в целое число. Она считывает их до ближайшего разделителя, т.е. пробела или enter. Она останавливает работу приложения до тех пор, пока человек не введет число на клавиатуре. То есть, например, если вы запустили myscan.nextInt () и ушли от компьютера, то он и через 10 лет будет ожидать, когда вы введете число и нажмете enter.

Аналогично nextDouble () возвращает дробное число, а функция next () возвращает одно слово как строку String. Со строками мы научимся работать в ближайших уроках.

Пример:

int a = myscan.nextInt (); // сначала считать целое и сохранить в a 

double b = myscan.nextDouble (); // далее считать дробное в b 

int c = myscan.nextInt (); // наконец считать ещё целое в c 

В общем случае для int и double это выглядит так:

тип имя = myscan.nextТип ();

Если человек введёт вместо цифр что-то другое — буквы или другие символы — то функция nextDouble «кинет исключение». Кинуть исключение — значит остановить программу с сообщением об ошибке. Ошибка может выглядеть так: «Exception in thread main java.util.InputMismatchException … at java.util.Scanner.nextDouble». В описании ошибки (его ещё называют log программы) может быть очень много текста, но ваша задача найти самый понятный ключевой кусок. Например, InputMismatchException переводится как «исключение — несоответствие ввода», а дальше «at java.util.Scanner.nextDouble» означает «при Scanner.nextDouble». Значит речь шла о неправильно введённом дробном числе.

В будущем мы научимся «ловить» (программное слово catch) исключения, которые «кинула» (программное слово throw) программа, то есть корректно реагировать на ошибку. Например, попросить пользователя ввести число заново, если он ввёл что-то не то. Имейте в виду, что «неправильным» символом может оказаться банальная точка в дробном числе — в Америке для этого используется запятая, а в России точка, и иногда возникает путаница. Программу можно настроить, чтобы она считывала числа так, как вы хотите, но для начала просто имейте в виду, что если дробное число не считывается через точку, то можно попробовать вместо неё ввести запятую.

Самое главное мы уже освоили. Теперь время решать задачи. Ответьте на несколько вопросов, чтобы лучше усвоился новый материал:

Нужно сначала импортировать Scanner, а потом в main написать
Scanner s = new Scanner (System.in); // имя s или myscan — не важно
int x = s.nextInt ();

Да, можете объявлять их сколько угодно. Это похоже на объявление переменных одного типа.
// Вы можете объявить
int x = 10;
int y = 10;
// Так и объекты одного класса:
Scanner s1 = new Scanner (System.in);
Scanner s2 = new Scanner (System.in);
// Также мы могли объявить одну переменную, равной другой:
int z = y;
// Можем и со сканером сделать то же самое:
Scanner s3 = s2;
Мы будем подробно разбирать тонкости таких присваиваний в блоке про классы и объекты.

Задача 1. Как будет работать и что будет выдавать данная программа на экране?

package javaapplication5;
import java.util.Scanner;
public class JavaApplication5 {
    public static void main(String[] args) {
        Scanner myscan = new Scanner (System.in);
        
        System.out.println ("Привет!");
        System.out.println ("Введи первое число");

         double x = 0;
         x = myscan.nextDouble (); 

         double y = 0;
         y = myscan.nextDouble ();

         System.out.println (x + y);
    }             
}

Программа будет выдавать сумму двух дробных чисел, введенных пользователем. По сути, это прототип будущего калькулятора, который мы напишем в конце этого раздела.

Решайте больше задач по этому разделу здесь.

В следующей теме расскажем, как считывать одиночные символы, а не только целые слова

Member Avatar for redZERO


Hi guys

I am trying to build a program which scans data from a text file, but I keep getting an error when trying to compile it.

The code

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Scanner;
import java.io.*;

class anything extends JFrame
{
	public anything()
	{
		File stuff = new File(stuff.txt);
		Scanner scan = Scanner(stuff);
		int length; 
		int count = 0;
		double place;
			
			while(scan.hasNextDouble())
			{
				place = scan.NextDouble();
					count++;
			}

This isn’t the whole program, but is the part which has Scanner.

The errors

cannot find symbol variable txt
cannot find symbol method Scanner(java.io.File)
cannot find symbol method NextDouble()

So what is the problem, I have a feeling it has to do with the importing of scanner or something.


Recommended Answers

This: File stuff = new File(stuff.txt); Should be: File stuff = new File([B]"[/B]stuff.txt[B]"[/B]); This: Scanner scan = Scanner(stuff); Should be: Scanner scan = [B]new[/B] Scanner(stuff); This: place = scan.NextDouble(); I think should be: place = scan.[B]n[/B]extDouble(); Look at this:

Jump to Post

All 3 Replies

Member Avatar for javaAddict


javaAddict

900



Nearly a Senior Poster



Team Colleague



Featured Poster



This: File stuff = new File(stuff.txt); Should be: File stuff = new File([B]"[/B]stuff.txt[B]"[/B]); This: Scanner scan = Scanner(stuff); Should be: Scanner scan = [B]new[/B] Scanner(stuff); This: place = scan.NextDouble(); I think should be: place = scan.[B]n[/B]extDouble(); Look at this: Scanner

Member Avatar for redZERO


redZERO

0



Junior Poster in Training



Thanks very much man, I never would have found such an annoying error.

Thanks!

Member Avatar for javalearn


import java.util.Scanner;
class Handling
{
    public static int quotient(int a,int b)
    {

        return(a/b);

    }
public static void main(String[] arg)
{
    Scanner scanner=new Scanner(System.in);

    System.out.println(" enter value of a");

    int a=scanner.nextInt();

    System.out.println(" enter value of b");

    int b=scanner.nextInt();

    int result=quotient(a,b);

    System.out.println("\n result: a / b =  " +result);

    try 
    {
        result=quotient(a,b);
    }
    catch(Exception e)
    {
        System.out.println(" this is catch");
    }
    finally
    {
        System.out.println(" this is finally");
    }
}

Edited

by Reverend Jim because:

Fixed formatting


Reply to this topic

Be a part of the DaniWeb community

We’re a friendly, industry-focused community of developers, IT pros, digital marketers,
and technology enthusiasts meeting, networking, learning, and sharing knowledge.

Понравилась статья? Поделить с друзьями:
  • Scsi detect ошибка a6
  • Scs 7200015 код ошибки
  • Schneider electric altistart 22 ошибки
  • Scanner driver type 103 ошибка
  • Scrollview can host only one direct child ошибка