当有 String 和 int 作为输出时——我如何先打印 string?

When having String and int as an output - how do I print string first?

这段代码不起作用,每当我作为用户首先输入字符串数据然后输入整数数据时,它只接受输入而不打印数据。如果我改变:

String name = input.nextLine();
int age = input.nextInt(); 

这两个代码块的位置,首先输入 int,然后输入 String 作为第二个值,然后它愉快地打印第一个 int 数字,然后打印 String。请大家帮忙解决一下。我想先有名字和姓氏,然后我想有年龄。

package package1;

import java.util.Scanner;

public class experiment {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        try {
            System.out.println("Please enter your age and name: ");

            String name = input.nextLine();
            int age = input.nextInt();

            System.out.println("Your age is: " + age);
            System.out.println("Your name is: " + name);
        } finally {
            input.close();
        }
    }

}

我的输入是:

Aks Eyeless 2022

您是否尝试过使用 input.next() 而不是 input.nextLine();

单独声明姓名和年龄,更易理解。你可以写 try with resourses

    try (Scanner input = new Scanner(System.in)) {
        
        System.out.println("Please enter your name: ");
        String name = input.nextLine();

        System.out.println("Please enter your age: ");
        int age = input.nextInt();

        System.out.println("Your age is: " + age);
        System.out.println("Your name is: " + name);
    }

第一件事:欢迎来到 Whosebug :D

你的问题

您提供输入的方式似乎有误。我在本地测试过它,它工作得很好,但是你必须小心你输入数据的方式。 nextLine() 将从 StandardOutput 读取,直到它到达 \n 也就是换行符。另一方面,nextInt() 将读取下一个整数,直到达到 space。那么会发生什么:您在一行 (f.e.Whosebug 2022) 中输入所有数据,中间用 space 分隔,然后按回车键。这将保存在您的变量 name 中。然后,控制台等待您的整数输入。如果你输入一些数字,它会成功打印出名字(Whosebug 2022)和年龄。

解决方案

如果您只是想让您的代码正常工作:

输入姓名后按回车键,然后输入数字:您的代码有效!

如果您 100% 必须在一行中提供输入:

  1. 使用 next() 而不是 nextLine()。这将一直读到 space,但要小心:如果您输入的名称包含 space,其余的将被解释为整数,您可能会将 运行 转换为 InputMismatchException-s

一般建议:

您可以通过要求用户具体输入他们的姓名和年龄来尝试让您的程序更具交互性。

另一个重要的变化是一些更好的异常处理,例如,当提示用户输入一个整数时,he/she 提供了一个字符串。

欢迎在评论中讨论您的更改/问题/想法/想法 :D

这是在一行中输入姓名和年龄的方法。

Please enter your name and age: Gilbert Le Blanc 66
Your age is: 66
Your name is: Gilbert Le Blanc

您执行 Scanner nextLine 方法,然后解析(分离)年龄与姓​​名。 String class 有很多有用的方法来解析字符串。

这是修改后的代码。

import java.util.Scanner;

public class Experiment {
    
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        try {
            System.out.print("Please enter your name and age: ");

            String text = input.nextLine();
            int endIndex = text.lastIndexOf(' ');
            String name = text.substring(0, endIndex);
            int age = Integer.valueOf(text.substring(endIndex + 1));

            System.out.println("Your age is: " + age);
            System.out.println("Your name is: " + name);
        } finally {
            input.close();
        }
    }

}