【问题标题】:What's wrong in my code (Java character input beginner)我的代码有什么问题(Java 字符输入初学者)
【发布时间】:2017-09-24 20:59:44
【问题描述】:
import java.util.Scanner;
public class Application {

public static void main(String[] args) {
    do {
    System.out.println("What is the command keyword to exit a loop in Java?\na. int\nb. continue\nc. break\nd. exit\nEnter your choice");
    Scanner ans = new Scanner(System.in);
    char ans = sc.next().charAt(0);
    if(ans=='c')
        System.out.println("Correct");
    else
        System.out.println("Wrong! Presss Y to try again.");
    Scanner redo = new Scanner(System.in);
    char redo = sc.next().charAt(0);
    }
    while(redo=='y');
}

}

我刚开始学习 Java,你能告诉我我的代码有什么问题以及如何改进它吗?谢谢

这是我收到的错误。

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
Duplicate local variable ans
sc cannot be resolved
Duplicate local variable redo
sc cannot be resolved
redo cannot be resolved to a variable

at Application.main(Application.java:9)

【问题讨论】:

  • 你为什么认为这是错误的?
  • 它不起作用。这是错误...线程“main”java.lang.Error中的异常:未解决的编译问题:无法解决重复的局部变量ans sc无法解决重复的局部变量redo sc无法解决重做无法解析为Application.main的变量(Application.java:9)
  • 请不要在 cmets 中发布错误。请改为edit您的问题。
  • 我已经编辑了我的问题
  • 好。现在您觉得这些错误消息的哪一部分不清楚?

标签: java input char


【解决方案1】:

认为你想得到这样的东西:

public class Application {

    public static void main(String[] args) {
        char redo;
        do {
            System.out.println("What is the command keyword to exit a loop in Java?\na. int\nb. continue\nc. break\nd. exit\nEnter your choice");
            Scanner scanner = new Scanner(System.in);
            char ans = scanner.next().charAt(0);
            if (ans == 'c') {
                System.out.println("Correct");
                break;
            }
            else {
                System.out.println("Wrong! Presss Y to try again.");
                redo = scanner.next().charAt(0);
            }
        }
        while (redo == 'y');
    }

}

实施中的问题:

错误的变量定义

尝试重新定义ans 变量会导致编译错误。使用不同的变量名。例如:

Scanner scanner = new Scanner(System.in);
char ans = scanner.next().charAt(0);

而不是这个

Scanner ans = new Scanner(System.in);
char ans = sc.next().charAt(0);

如果答案正确,您可能想打破循环

所以最好在ans=='c'时添加break:

if (ans == 'c') {
   System.out.println("Correct");
   break;
}

while条件变量定义

在do-while循环块之前定义redo变量,否则会出现编译错误

【讨论】:

  • 导致这个错误..可能是局部变量redo没有初始化
  • 我已将其初始化为零。非常感谢你的帮助 !你知道为什么要先设置为零吗?
  • 如果你在我的提议中检查redo 值而没有break 语句,它应该用一些值初始化(smth 但不是'y',否则会破坏逻辑)。但是如果你在ans=='c' 时使用break 语句,那么你会在redo 检查之前退出循环(所以在这种情况下,不需要redo='0' 定义)
【解决方案2】:

在以下 2 语句中重复局部变量“ans”。将当时的任何人重命名为另一个人。

Scanner ans = new Scanner(System.in);
   char ans = sc.next().charAt(0);

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-14
  • 2019-09-01
  • 2019-06-06
  • 1970-01-01
相关资源
最近更新 更多