Java:它一直说“变量 yn 可能尚未初始化”

我已经初始化了变量 yn,但它一直说我没有初始化。尝试直接在扫描仪上对其进行初始化,但出现错误并再次提示它已在方法中初始化。


import java.util.Scanner;


public class sample

{

  public static void main(String[] args)

  {


    Scanner s = new Scanner(System.in);


    int num;

    char yn;


    while (yn == 'Y' && yn == 'y')

    {

      do

      {

        System.out.print("Enter a positive integer: ");

        num = s.nextInt();

        if (num < 0)

        {

          System.out.print(num + "is a negative integer. Please try again!");

        }

        else

        {

          if (num % 2 == 0)

          {

            System.out.println(num + " is an even number.");

          }

          else

          {

            System.out.println(num + " is an odd number.");

          }

          continue;

        }

      }

      while (num < 0);

      System.out.println("Press Y if you want to input again and N if no.");

      yn = s.next().charAt(0);

      do

      {

        if (yn == 'N' && yn == 'n')

        {

          System.out.println("Done!");

          break;

        }

        else if (yn == 'Y' && yn == 'y')

        {

          System.out.println("Done!");

          continue;

        }

        else

        {

          System.out.println("Invalid Input! Try again!");

          break;

        }

      }

      while (yn != 'Y' && yn != 'y' && yn != 'N' && yn != 'n');

    }


  }

}


慕勒3428872
浏览 78回答 4
4回答

aluckdog

您声明时yn没有初始值,然后立即将其用作循环条件。char yn;while(yn == 'Y' && yn == 'y'){意味着您期望默认值y(或Y)。您必须显式设置它才能使其成为true。另外,没有一个字符是两者兼而有之'Y','y'所以你需要一个逻辑或。喜欢,char yn = 'Y';while(yn == 'Y' || yn == 'y') {您也可以考虑char yn = 'Y';while (Character.toUpperCase(yn) == 'Y') {然后你就不需要一个||. 你在这里也有同样的逻辑不可能性if(yn == 'N' && yn == 'n'){&nbsp; &nbsp; System.out.println("Done!");&nbsp; &nbsp; break;}else if(yn == 'Y' && yn == 'y'){&nbsp; &nbsp; System.out.println("Done!");&nbsp; &nbsp; continue;}||并可以用(或用)修复它Character.toUpperCase(char)。

神不在的星期二

char&nbsp;yn;这是声明变量的地方。while(yn&nbsp;==&nbsp;'Y'&nbsp;&&&nbsp;yn&nbsp;==&nbsp;'y'){这是您使用变量的地方。这两行之间没有 yn 初始化 - 这就是它未初始化时使用的原因。

慕标5832272

在Java中,每当你声明一个变量但不初始化它(就像你的情况一样char yn;),编译器会进一步检查它的初始化部分。如果您稍后在任何具有条件的范围内初始化它(例如您的情况while (yn == 'Y' && yn == 'y'){..}),那么编译器将无法在编译时决定范围或块内的代码是否将被执行。因此,尽管您已在块内进行了初始化,但编译器无法保证。因此编译器会抛出一个错误,指出变量未初始化。

饮歌长啸

将“Yn”视为一个容器,如果您想测试该容器内的内容,则需要在容器中放置一些东西,或者在本例中char&nbsp;yn;应该成为char&nbsp;yn&nbsp;=&nbsp;'Y';您使用while 循环和if语句进行测试char&nbsp;yn;&nbsp;//You&nbsp;are&nbsp;DECLARING&nbsp;a&nbsp;variable char&nbsp;yn&nbsp;=&nbsp;'Y'&nbsp;//You&nbsp;are&nbsp;Initialising&nbsp;a&nbsp;variable就你而言,你可以说char&nbsp;yn&nbsp;=&nbsp;'&nbsp;';因为我相信这就是你试图做的我还注意到您正在尝试测试yn变量是否同时为大写和小写,您可以通过将 && (AND) 更改为 || 来解决此问题&nbsp;(或者)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java