我的数组的第一个位置没有被修改

The first position of my array isn't being modified

我正在创建一个将 5 位邮政编码转换为框条的应用程序。奇怪的是,输入的第一个数字没有正确地进行转换。这是代码:

import java.util.*;
import java.lang.*;
import java.io.*;
class Zip{

    public static String checkDigit(String bar)
    {
        Scanner s = new Scanner(System.in);
        int [] input;
        input = new int [4];
        for(int p = 0; p < 4; p++)
        {
            input[p] = s.nextInt();
            if (input[p] == 0)
            {
                bar = bar + "||:::";
            }
            if (input[p] == 1)
            {
                bar = bar + ":::||";
            }
        }
        System.out.println();
        return bar;
    }

    public static void main (String[] args) {   
        Scanner s = new Scanner(System.in);
        System.out.println(checkDigit(s.nextLine())); 
    }
}

例如在数组中输入1,0,0,0,0时,输出为

"1||:::||:::||:::||:::"

在数组中输入0,1,1,1,1时,输出为

"0:::||:::||:::||:::||"

它不转换位置 [0] 的第一个数字,而是直接打印数字。这是为什么?

您正在 main() 中创建和读取 Scanner 对象,因此第一个数字进入发送到 checkDigit 方法的 bar 参数。

我会完全删除 bar 参数并进行一些其他更改。

public static String checkDigit() {
    StringBuilder bar = new StringBuilder();
    Scanner s = new Scanner(System.in);
    int input = 0;
    for(int p = 0; p < 5; p++) {
        input = s.nextInt();
        if (input == 0) {
            bar.append("||:::");
        }
        if (input == 1) {
            bar.append(":::||");
        }
    }
    return bar.toString();
}

这是因为 s.nextLine() 它会读取控制台中输入的第一个 int 并将其保存在 String bar 传递给 checkDigit()

Scanner s = new Scanner(System.in);
    System.out.println(checkDigit(s.nextLine())); 

传递空字符串

Scanner s = new Scanner(System.in);
    System.out.println(checkDigit("")); 

输入: 0 1 1 1

输出: ||:::::||:::||:::||

@ddalcanto 实际上这里没有太大问题。您的逻辑非常好。只是一些小错误导致输出异常。

  1. 第一个输入按原样显示,因为您将更新的值附加到 bar 字符串,由于 [=15= 中的 s.nextLine(),它只是第一个接受的字符] 功能。因此,请参见第 2 点。
  2. 不需要将 s.nextLine() 作为参数发送给 checkDigit() 的函数调用。还要从函数定义中删除 string bar 作为参数。这就是导致您提供额外输入的原因。例如,5 个输入用于预期的 4 个输入等。
  3. 您的 input[] 数组的大小为 4,但您从 0 to 4 开始循环,这意味着需要 5 次才能获得 5 个输入,但该数组只能容纳 4 个元素。只需将数组大小更改为 5。=> input = new int[5];

这是更新后的工作代码以及相关的输出。

代码:

import java.util.*;
import java.lang.*;
import java.io.*;
class Zip{

    public static String checkDigit()
    {
        Scanner s = new Scanner(System.in);
        String bar  = "";
        int [] input;
        input = new int [5];
        for(int p = 0; p < 5; p++)
        {
            input[p] = s.nextInt();
            if (input[p] == 0)
            {
                bar = bar + "||:::";
            }
            if (input[p] == 1)
            {
                bar = bar + ":::||";
            }
        }
        System.out.println();
        return bar;
    }

    public static void main (String[] args) {   
        Scanner s = new Scanner(System.in);
        System.out.println(checkDigit()); 
    }
}

输出:

 1
 1
 1
 1
 1

:::||:::||:::||:::||:::||

另一个输入输出对:

 0
 1
 1
 0
 1

||::::::||:::||||::::::||