我正在创建一个将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 ::: ||| ::: || ::: || ::: ||”
它没有打印pos [0]处的第一位数字,而是直接打印数字。为什么会这样?
答案 0 :(得分:1)
由于public List<string> GetCombinedParticipants(List<string> players,
PlayerContainer allPlayers)
{
// Make a copy of the input list
var results = players.ToList();
for (int i = 0; i < allPlayers.Count; i++)
{
var fullName = $"{allPlayers.FindName(i)} {allPlayers.FindSurname(i)}";
if (!results.Contains(fullName)) results.Add(fullName);
}
// Order by last name, then by first name
return results
.OrderBy(name => name.Substring(name.LastIndexOf(" ") + 1))
.ThenBy(name => name.Substring(0, name.LastIndexOf(" ")))
.ToList();
}
的缘故,它将读取在控制台中输入的第一个int并将其保存在s.nextLine()
中并传递到String bar
checkDigit()
传递一个空字符串
Scanner s = new Scanner(System.in);
System.out.println(checkDigit(s.nextLine()));
输入: 0 1 1 1
输出: || :::::: || ::: || ::: ||
答案 1 :(得分:1)
@ddalcanto实际上没有什么问题。您的逻辑几乎没问题。.导致输出异常的一些小错误。
bar
字符串,因为s.nextLine()
函数中的main()
是第一个可接受的字符。因此,请参见第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 ||::::::||:::||||::::::||
答案 2 :(得分:0)
您要在main()中创建和读取Scanner对象,因此第一位进入发送到bar
方法的checkDigit
参数。
我将完全删除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();
}