当前位置: 首页 > 知识库问答 >
问题:

Java:它一直说变量yn可能没有被初始化[重复]

江新
2023-03-14

我已经初始化了变量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');
    }

  }
}

共有3个答案

管梓
2023-03-14

把“Yn”想象成一个容器,如果你想测试容器中的东西,或者在这种情况下,你需要在容器中放一些东西

char yn;

应该成为

char yn = 'Y';

您可以使用while循环和if语句进行测试

char yn; //You are DECLARING a variable
char yn = 'Y' //You are Initialising a variable

在你的情况下,你可以说

char yn = ' '; 

因为我相信这就是你想要做的

我还注意到您正在尝试测试yn变量是否同时为大写和小写,您可以通过更改

金嘉
2023-03-14
char yn;

这是您声明变量的地方。

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

这就是使用变量的地方。这两行之间的任何地方都没有初始化,这就是为什么它被未初始化地使用。

黄啸
2023-03-14

声明没有初始值的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'){
    System.out.println("Done!");
    break;
}
else if(yn == 'Y' && yn == 'y'){
    System.out.println("Done!");
    continue;
}

并且可以用||(或者用Character.toUpperCase(char))修复它。

 类似资料:
  • 问题内容: 当我尝试编译时: 我得到这些错误: 在我看来,我在方法的顶部初始化了它们。怎么了 问题答案: 你声明了它们,但没有初始化它们。初始化它们是将它们设置为等于一个值: 因为未初始化变量,但在循环中增加了变量(例如),所以会收到错误消息。 Java原语具有默认值,但如下一位用户所述 当声明为类成员时,它们的默认值为零。局部变量没有默认值

  • 我的编译器不会有它(现在怎么办?我必须完全重写整个应用程序吗? 要查看编译器拒绝的行,请执行系统搜索。出来println(celsius输出“C”); 当试图编译时,编译器告诉我,“变量celsiusOutput可能尚未初始化。”编译器对另外两个输出项中的任何一个都不说同样的话:华氏输出和开尔文输出。

  • 我只是不明白为什么这不起作用: HelloWorld.java:15:错误:变量isOdd可能没有被初始化 如果(isOdd==false){

  • 我正在研究Euler Problem 9项目,其中说明: 毕达哥拉斯三元组是由三个自然数组成的集合 例如,3^2 4^2=9 16=25=52。 确实存在一个毕达哥拉斯三重态,其bc=1000。查找产品abc。 以下是我到目前为止所做的: 当我运行代码时,会出现以下错误: 注意:我的每个变量(a、b和c)都有不同的行号。 我想当我声明a、b和c为整数时,如果不赋值,默认值是0。 即使不是这样,在我

  • 下面是我的代码片段: 在这条线内: Java编译器抛出错误并说 错误:变量someObject可能尚未初始化`。 但是,如果等于,那么就不可能没有被初始化,为什么会出现这个错误?

  • 问题内容: 我有一个方法创建一个,另一个方法更改字符串 我的编译器说它“可能尚未初始化”。 有人可以解释吗? 问题答案: 变量可能尚未初始化 在内部定义方法时,必须在其中初始化程序的每个变量中必须先使用一个值的地方。 同样重要的是,您的代码将永远无法正常运行,因为Java中的字符串是不可变的,因此您无法编辑字符串,因此应更改方法。 我将您的代码更改为类似的内容,但是我认为您的编辑方法应该做另一件事