陈落轩 发表于 2023-10-22 22:16:19

使用next读入字符串无法跳出循环

package test1;

import java.util.Scanner;

public class Cat {
        private int SN, i = 1;
        private String name;
        private static int counter = 0; // 设置全局变量
       
        public Cat(String name) {
                this.name = name;
                counter ++;
                SN = counter;
        }
       
        public void speak() {
          for(int i = 1; i <= SN; i++) {
                System.out.println("创建了第" + i + "只猫,名字是" + name);
          }
          System.out.println("共创建了" + SN + "只猫");
        }

        public static void main(String[] args) {
          int i = 0;
          Cat c[] = new Cat;
             
          Scanner input = new Scanner(System.in);
          String cat = input.next();
             
          while (cat != "return") {
                c = new Cat(cat);
                System.out.println("创建了猫:" + cat); // 输出创建的猫的名字
                i++;
                cat = input.next();
          }
             
          for (int j = 0; j < i; j++) {
                c.speak();
          }
        }
}
想要当输入为return时退出循环,但是无法退出,请问为什么呢?

Mike_python小 发表于 2023-10-22 22:16:20

问题出在判断是否退出循环的语句上。在Java中,判断两个字符串是否相等时不能使用“==”,而应该使用equals()方法。修改代码如下:


Scanner input = new Scanner(System.in);
String cat = input.next();

while (!cat.equals("return")) { // 判断字符串是否相等
    c = new Cat(cat);
    System.out.println("创建了猫:" + cat);
    i++;
    cat = input.next();
}


使用equals()方法判断字符串是否相等可以避免使用“==”时出现的问题。此外,在输入字符串时,建议使用nextLine()方法读取一行字符串,这样可以避免输入中包含空格或其他特殊字符时出现的问题。修改后的代码如下:


Scanner input = new Scanner(System.in);

while (true) {
    String cat = input.nextLine();
    if (cat.equals("return")) {
      break; // 跳出循环
    }
    c = new Cat(cat);
    System.out.println("创建了猫:" + cat);
    i++;
}


在这个例子中,我们使用了一个无限循环(while(true)),并在循环内部使用break语句来跳出循环。每次循环开始时,使用nextLine()方法读取一行字符串,并判断它是否等于“return”。如果是,就调用break语句跳出循环;如果不是,就创建一个新的Cat对象,并输出相应的信息。

希望这样可以解决你的问题,祝你学习愉快!

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

isdkz 发表于 2023-10-22 22:16:36

在Java中,字符串的比较应该使用equals()方法而不是使用==或!=运算符进行比较。在你的代码中,你使用了 while (cat != "return") 来比较字符串,这是不正确的。

正确的做法是使用 while (!cat.equals("return")) 来比较字符串。这是因为 == 运算符比较的是对象的引用,而不是对象的内容。而equals()方法比较的是对象的内容。

所以,你应该将你的代码修改为:

while (!cat.equals("return")) {
    c[ i] = new Cat(cat);
    System.out.println("创建了猫:" + cat);
    i++;
    cat = input.next();
}


这样,当输入为"return"时,循环将会退出。

nexcafe2 发表于 2023-10-22 22:23:16

while (!cat.equals("return")) {// 使用.equals()方法比较字符串
    c = new Cat(cat);
    System.out.println("创建了猫:" + cat); // 输出创建的猫的名字
    i++;
    cat = input.next();
}

java里while (cat != "return")不妥啊
页: [1]
查看完整版本: 使用next读入字符串无法跳出循环