Не читайте сканер, расположенный в основном из метода

Объект Scanner, расположенный в main (поскольку он будет использоваться различными методами) , не принимает пользовательские данные. Scanner не работает для меня.

public static void main(String[] args) {
jugarPartida();
valoracionPartida();
Scanner sc = new Scanner(System.in);
}

public static void jugarPartida(){
System.out.print("Introduce numero: ");
numero = sc.nextInt();
/*Aquí sucede un juego*/
}

public static void valoracionPartida(){
System.out.print("Introduce numero(0-10): ");
valoracion = sc.nextInt();
/*Aquí agradecerá la valoración*/
}
2
задан 29.11.2019, 18:13
4 ответа

чтобы использовать класс scanner глобальной, грубой формы несмотря на то, что наставлять ее в классе main, а именно, в главном классе, не внутри mГ©todo main. TambiГ©n не было из-за того, что объявлял переменные nГєmero и valoraciГіn, что в этом случае если irГ - во внутри Ваш mГ©todos если только ты не захочешь использовать их в других mГ©todos, в этом случае irГ - в tambiГ©n вне mГ©todo main, в главном классе. QuedarГ - в asГ-:


package main;

import java.util.Scanner;

public class Main {

    static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {
        jugarPartida();
        valoracionPartida();        
    }
        public static void jugarPartida(){      
        int numero;
        System.out.print("Introduce numero: ");
        numero = sc.nextInt();
        /*Aquí sucede un juego*/
        }

        public static void valoracionPartida(){
        int valoracion;
        System.out.print("Introduce numero(0-10): ");
        valoracion = sc.nextInt();
        /*Aquí agradecerá la valoración*/
        }
}

Надеялся, что он ты помогает, приветствие.

1
ответ дан 01.12.2019, 10:35

Ошибка estГЎ, в котором ты Scanner должен бы быть внутри jugarPartida() или как глобально и переменной numero не estГЎ instanciada:

static Scanner sc;
public static void main(String[] args) {
    sc = new Scanner(System.in);
    jugarPartida();

}

public static void jugarPartida(){
    System.out.print("Introduce numero: ");

    int numero = sc.nextInt();
    /*Aquí sucede un juego*/
    System.out.print("Esto se introdujo: " + numero);
}
1
ответ дан 01.12.2019, 10:35
  • 1
    Тот же scanner utilizará в нескольких mé все, поэтому мой interé s, которого он был помещен в main. Спасибо Израиль-ICM – alderson 29.11.2019, 17:54
  • 2
    хороший измените код с scanner как глобально – Israel-ICM 29.11.2019, 18:07

Для того, чтобы ты смог использовать это в mГЎs одного mГ©todo, ты должен объявлять это глобальной формы:

public class Miclase{
   static Scanner sc = new Scanner(System.in);//justo después de la clase

    public static void main(String[] args) {
        jugarPartida();
        valoracionPartida();

    }

    public static void jugarPartida(){
        System.out.print("Introduce numero: ");
        numero = sc.nextInt();
        /*Aquí sucede un juego*/
    }

    public static void valoracionPartida(){
        System.out.print("Introduce numero(0-10): ");
        valoracion = sc.nextInt();
    /*Aquí agradecerá la valoración*/
    }


}

Таким образом podrГЎs использовать во всех них mГ©todos, что находились внутри твоего класса

EDIT:

, должно быть, объявляет переменную static, так как только asГ - podrГЎ, static использован в них mГ©todos:

 static Scanner sc = new Scanner(System.in);
1
ответ дан 01.12.2019, 10:35
  • 1
    Возврати ошибку в переменную sc: ошибка: изменчивое нечетное число - static sc cannot be referenced from в static context – alderson 29.11.2019, 18:10
  • 2
    Извини, я изменил мой ответ, последуй, что все переменные, использованные внутри mé весь está костариканский, tambié n это, должно быть, está костариканские – Riaven 29.11.2019, 19:04
  • 3
    спасибо Riaven! – alderson 29.11.2019, 19:08

не читает Scanner, помещенный в main с одного mГ©todo

Это себе должно porquГ© идентификатора sc не estГЎ объявленный в них mГ©todos jugarPartida и valoracionPartida, поэтому, darГЎ ошибка compilaciГіn, благодаря тому, что, составитель это tomarГЎ как, что если когда бы то ни было existiГі.

возможная Одна soluciГіn, состоит в том, чтобы добавлять один parГЎmetro добавочный (типа Scanner) в mГ©todos jugarPartida и valoracionPartida, таким образом, в момент призывания этих mГ©todos, podrГЎs перемещать ссылку объекта, на который указывал указатель implГ, - упомянул sc (mГ©todo main).

QuedarГ - В, таким образом:

import java.util.*;

public class Program
{
    public static void main(String[] args) 
    {
        Scanner sc = new Scanner(System.in);
        //Le pasamos la referencia que tenga guardada el puntero sc
        jugarPartida(sc);
        valoracionPartida(sc);
    }

    public static void jugarPartida(Scanner sc)
    {
        int numero;
        System.out.print("Introduce numero: ");
        numero = sc.nextInt();
    }

    public static void valoracionPartida(Scanner sc)
    {
        int valoracion;
        System.out.print("Introduce numero(0-10): ");
        valoracion = sc.nextInt();
    }
}

TambiГ©n нажал, что faltГі объявлять переменные valoracion и numero, иначе, habrГЎ ошибка compilaciГіn (porquГ© идентификатор / имя когда бы то ни было serГЎ созданный для составителя).

Другая soluciГіn состоит в том, чтобы объявлять идентификатора sc как глобально.

cГіdigo quedarГ - в таким образом:

public class Program
{
    Scanner sc = new Scanner(System.in);
    public static void main(String[] args) 
    {
        jugarPartida();
        valoracionPartida();
    }

    public static void jugarPartida()
    {
        int numero;
        System.out.print("Introduce numero: ");
        numero = sc.nextInt();
    }

    public static void valoracionPartida()
    {
        int valoracion;
        System.out.print("Introduce numero(0-10): ");
        valoracion = sc.nextInt();
    }
}

, Но если ты замечаешь, если мы составляем с нее lГ-nea команд: javac Program.java, мы ощутимся, что он дал нам ошибку compilaciГіn:

non-static method cannot be referenced from a static context

ВїQuГ© значит эту ошибку?

Это значит, что mГ©todos jugarPartida и valoracionPartida нуждаются в ссылке объекта (в этом случае типа Program), однако, истинная razГіn ошибки, не porquГ© никогда creГі ningГєn объект типа Program, тогда, Вїcomo mГ©todo estГЎtico podrГ, - чтобы соглашаться на признак sc, если в действительности объект не существует? Так как ответ serГ - в НЕ . Не возможно и также не имеет смысл.

ВїHay какая-то soluciГіn без необходимости добавлять ключевое слово static к переменной sc?

, Итак, если она есть. Форма, чтобы предотвращать эту ошибку, это добавляя один parГЎmetro добавочный в них mГ©todos jugarPartida и valoracionPartida, в которой, этом parГЎmetro serГЎ типа Program и tendrГ-хозяев, что instanciar класс в mГ©todo main и посылать эту ссылку объекта в parГЎmetro mГ©todo.

В cГіdigo serГ - в, таким образом:

public class Program
{
    Scanner sc = new Scanner(System.in);
    public static void main(String[] args) 
    {
        Program p = new Program();
        jugarPartida(p);
        valoracionPartida(p);
    }

    public static void jugarPartida(Program p)
    {
        int numero;
        System.out.print("Introduce numero: ");
        numero = p.sc.nextInt();
    }

    public static void valoracionPartida(Program p)
    {
        int valoracion;
        System.out.print("Introduce numero(0-10): ");
        valoracion = p.sc.nextInt();
    }
}

Таким образом, не darГЎ ошибка compilaciГіn porquГ© объект был создан и указатель implГ - упомянул p (типа Program) tendrГЎ ссылка объекта и таким образом мы сможем соглашаться на признак sc без ningГєn проблема.

Однако, мы ощущаемся, что он soluciГіn, он делает нам instanciar класс, когда в действительности объект типа Program serГЎ созданный Гєnica раз, следовательно, ненужный, потому что у нас не будет mГЎs объекта типа Program. Тогда, чтобы не создавать объект из-за вкуса, podrГ-хозяева объявлять глобальную переменную sc как estГЎtica и ahГ - не necesitarГ-хозяева, которые они mГ©todos были бы у ссылки объекта типа Program, porquГ© переменная sc estarГ - в хранение в зоне estГЎtica (в этой зоне памяти он, где регистрируются данные estГЎticos, что они продолжаются до тех пор, пока программа не закончится), и состоит vГЎlido в том, чтобы мочь соглашаться на контент переменной sc в одном mГ©todo estГЎtico, porquГ© переменная sc не estarГ - в в объекте.

Со сделанными изменениями, мы прибываем к этому cГіdigo:

public class Program
{
    static Scanner sc = new Scanner(System.in);
    public static void main(String[] args) 
    {
        jugarPartida();
        valoracionPartida();
    }

    public static void jugarPartida()
    {
        int numero;
        System.out.print("Introduce numero: ");
        numero = sc.nextInt();
    }

    public static void valoracionPartida()
    {
        int valoracion;
        System.out.print("Introduce numero(0-10): ");
        valoracion = sc.nextInt();
    }
}
0
ответ дан 01.12.2019, 10:35

Теги

Похожие вопросы