我的数组的第一个位置没有被修改
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 实际上这里没有太大问题。您的逻辑非常好。只是一些小错误导致输出异常。
- 第一个输入按原样显示,因为您将更新的值附加到
bar
字符串,由于 [=15= 中的 s.nextLine()
,它只是第一个接受的字符] 功能。因此,请参见第 2 点。
- 不需要将
s.nextLine()
作为参数发送给 checkDigit()
的函数调用。还要从函数定义中删除 string bar
作为参数。这就是导致您提供额外输入的原因。例如,5 个输入用于预期的 4 个输入等。
- 您的
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
||::::::||:::||||::::::||
我正在创建一个将 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 实际上这里没有太大问题。您的逻辑非常好。只是一些小错误导致输出异常。
- 第一个输入按原样显示,因为您将更新的值附加到
bar
字符串,由于 [=15= 中的s.nextLine()
,它只是第一个接受的字符] 功能。因此,请参见第 2 点。 - 不需要将
s.nextLine()
作为参数发送给checkDigit()
的函数调用。还要从函数定义中删除string bar
作为参数。这就是导致您提供额外输入的原因。例如,5 个输入用于预期的 4 个输入等。 - 您的
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 ||::::::||:::||||::::::||