Ошибка Do-While Java-Try-Catch при обработке ошибки цикла и символ: ошибка переменной - PullRequest
0 голосов
/ 08 октября 2019

Исправлено (новый рабочий код ниже). Я сталкиваюсь с небольшой проблемой, которую не могу понять. Первый do-while работает как задумано и будет проходить до тех пор, пока не получит действительный ввод. Тем не менее, второй цикл закончится независимо от того, введу я правильный или неправильный #. И затем в 3-м цикле я получаю 2 ошибки:

Я не уверен, почему я получаю эти ошибки, когда переменные уже были объявлены?

Немногообъяснение того, что я пытаюсь сделать:

Я должен получить 3 входа: годы опыта (yearsexp), производительность (производительность) и случайное значение типа int, сгенерированное между 1-10 (уровень). Программа спросит пользователя об их опыте, если между 3-11 они квалифицированы. Если нет, он скажет им, что они не являются квалифицированными и попросит повторно ввести значение. То же самое с производительностью. Если они вводят число, меньшее или равное 11, оно будет генерировать случайное значение int (уровень), на котором уровень точки будет использоваться для оценки их бонуса.

import java.util.Scanner;
import java.util.Random;     

class assignment {   
     public static void main( String args[]){
      //
      int bonus;
      int x;
      //
      Random rand = new Random();
      //
      Scanner input = new Scanner(System.in); // scanner for name
      System.out.println("Enter your name: "); // ask for name
      String name = input.nextLine(); // assign name to variable
      System.out.println( name ); // output name 
      // 
      Scanner input2 = new Scanner(System.in); // scanner for yearsexp
      System.out.println(name + ", Enter the years of your experience: "); // ask for yearsexp
      int yearsexp = 0 ; 
      int performance = 0;

      do 
      {
      yearsexp = input2.nextInt(); // assign yearsexp to variable
      System.out.println( yearsexp); // out yearsexp
      try
         {
         if (yearsexp >= 3 && yearsexp <24)// acceptable critera
            {
            System.out.println("You are qualified");// output
            x=2; // x = 2 to close do while
            }
         else
         {
         throw new Exception ();
         }
         }
       catch (Exception e1)
         {
         System.out.println("You have entered an invalid number! Try again..."); //output is unacceptable
         x=1;
         }
         }
         while (x==1); // keep do loop going if exception e 
      //
      Scanner input3 = new Scanner(System.in); // scanner for performance
      System.out.println(name + ", Enter the performance: "); // ask for performance
      //
      do 
      {
      performance = input3.nextInt(); // assign performance to variable
      System.out.println( performance ) ; // output performance
      try
         {
         if (performance <= 11) // acceptable criteria
            {
            System.out.println("You are qualified"); //output
            x=2; // x = 2 to close do while
            }
         else
            {
            throw new Exception ();
            }
         }
      catch (Exception e2)
         {
         System.out.println("You have entered an invalid number! Try again..."); //output if criteria is unacceptable
         x=1;
         }
         }
         while (x==1); // keep doing while
      //
      int level = rand.nextInt(11); // fix to be between 1-10 to not include 0
      System.out.println("Random Level: " + level);  //output level
      //
     do
      {
      try
         {
         if (level >=5 && level <=8)//acceptable criteria
            {
            System.out.println("Expected Bonus: $5000.00"); //output
            x = 2; // x = 2 to close while
            }
         else if (level <= 4) // else if criteria
            {
            bonus = 5000 * yearsexp * performance * level; // calculate bonus if level <=4
            System.out.println(bonus); // output bonus
            if (bonus < 15000)
               {
               System.out.println(bonus);
               }
            else if (bonus > 15000)
               {
               System.out.println("Your bonus is TBL");
               {
               x = 2; // x = 2 to close while
               }
             }
            }
           } 
        catch (Exception e3)
            {
            System.out.println("You do not get a bonus"); //output if criteria is unacceptable
            x=1;
            }
            }
            while (x==1); 

       }
  }

1 Ответ

1 голос
/ 08 октября 2019

Причина, по которой вы получаете эти ошибки компиляции, заключается в том, что performance ограничивается только оператором try вашего второго цикла do / while.

Если вам нужно «знание» значенияperformance и yearsexp для перехода от второго цикла do / while к третьему, вы должны объявить переменные перед обоими циклами, чтобы они были видны, чтобы быть видимыми для обоих.

Для переходаболее подробно,

if (foo()) {
  int myValue = 1;
}
System.out.println(myValue);

не работает, потому что переменная myValue ограничена оператором if, то есть, что касается оператора println, она не существует. То же самое верно и для операторов for, while, do/while и try/catch.

try {
  String a = "hello";
} catch (Exception e) {
}

System.out.println(a);

Также не работает.

...