Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的扫描程序返回空字符串_Java - Fatal编程技术网

Java中的扫描程序返回空字符串

Java中的扫描程序返回空字符串,java,Java,我有一部分代码正在工作。这基本上是一个扫描器输入,所以它可以节省空间字符串。这是我的代码: public class TestScannerString { static Scanner sc = new Scanner(System.in); public static void main(String[] args) { System.out.println("Enter strings: "); St

我有一部分代码正在工作。这基本上是一个扫描器输入,所以它可以节省空间字符串。这是我的代码:

public class TestScannerString {
    
    static Scanner sc = new Scanner(System.in);
    
    public static void main(String[] args) {
        System.out.println("Enter strings: "); 
        String[] a = sc.nextLine().split(" ");
        String name = "";
 
        for (String a0 : a) {
            name += a0 + " ";
        }
        
        System.out.println(name);

    }
}
这是该代码的输出:

然后我尝试将这段代码实现到mini项目中。这是包含前面代码的块:

for (int i=0; i<jumlahData; i++) {
            System.out.println("Masukkan Data Bayi ke " +(i+1));
            System.out.println("Nama : ");
            String[] a = sc.nextLine().split(" ");
            String name = "";
            for (String a0 : a) {
                name += a0 + " ";
            }
            bayi[i].nama = name;
            sc.nextLine();
            System.out.print("Usia dalam Bulan : ");
            bayi[i].usiaDalamBulan = sc.nextInt();
            System.out.print("Berat (kg) : ");
            bayi[i].beratDalamKg = sc.nextFloat();
            System.out.print("Panjang (cm) : ");
            bayi[i].panjangDalamCm = sc.nextInt();
            System.out.println("Name :" +name);
            System.out.println();
            System.out.println("Nama bayi ke " + (i+1) + ": " +bayi[i].nama);
}

for(inti=0;i我没有完整的代码来测试这一点,但似乎您有两行代码用于将一行字符串作为输入

String[] a = sc.nextLine().split(" ");


我猜您实际上是在输入第二行代码的名称,它不会将输入保存到任何引用。对于前一行代码,您可能错误地使用空字符串进行响应。

好的,因此修复方法是将nextLine()放入在扫描仪输入之前的循环开始。我认为这是因为之前的输入中有换行符。因此最终代码如下:

for (int i=0; i<jumlahData; i++) {
            sc.nextLine();
            System.out.println("Masukkan Data Bayi ke " +(i+1));
            System.out.print("Nama : ");
            String nameTest = sc.nextLine();
            bayi[i].nama = nameTest;
            System.out.print("Usia dalam Bulan : ");
            bayi[i].usiaDalamBulan = sc.nextInt();
            System.out.print("Berat (kg) : ");
            bayi[i].beratDalamKg = sc.nextFloat();
            System.out.print("Panjang (cm) : ");
            bayi[i].panjangDalamCm = sc.nextInt();
            System.out.println();
}

for(int i=0;iSo)您在每次迭代中都对字符串输入进行标记化,只是为了重建相同的字符串?为什么不将字符串作为用户输入?bayi[i].nama=sc.nextLine()为什么你甚至想做整个
name
code?你的
name
变量和输入是一样的。为什么要拆分然后重新加入?一个建议。在你的
System.out.println(“Nama:);
,而不是使用
System.out.print()
因此名称的
示例紧跟在
Nama
之后,而不是在下一行。bayi[i].Nama是字符串而不是字符串数组,因此我将字符串数组重构为字符串
sc.nextLine()
bayi[i]之后.nama=name;
之所以编写,是因为Scanner类在获取字符串输入后不获取整数输入。它将整数输入视为字符串输入的一部分。若要解决此问题,请先输入整数,然后在最后输入字符串,或者添加新的
sc.nextLine()
在字符串输入之后,如@abw1904所做的那样。然后他可以应用中给出的一个答案。这些模糊类型的黑客会导致副作用,比如用户提供输入时的混乱体验。他应该尝试从其他问题中选择一个更好的选项。我发现有趣的一点是有两个单独的扫描仪来避免这个问题。sc.nextL使用ine是为了不跳转到下一个输入。还有其他建议吗?在我上面的评论中,链接问题中有很多选项。我在给出的选项中提到了一个选项,但我自己没有尝试过看它是否没有副作用。我在那里尝试过解决方案,但只有在“先整数,后字符串”的情况下才能应用,否则,它也会跳过名称。我尝试使用扫描仪。也跳过,但不起作用。
for (int i=0; i<jumlahData; i++) {
            sc.nextLine();
            System.out.println("Masukkan Data Bayi ke " +(i+1));
            System.out.print("Nama : ");
            String nameTest = sc.nextLine();
            bayi[i].nama = nameTest;
            System.out.print("Usia dalam Bulan : ");
            bayi[i].usiaDalamBulan = sc.nextInt();
            System.out.print("Berat (kg) : ");
            bayi[i].beratDalamKg = sc.nextFloat();
            System.out.print("Panjang (cm) : ");
            bayi[i].panjangDalamCm = sc.nextInt();
            System.out.println();
}