为什么在java中读取stdin时跳过第一次迭代?
下面的程序总是跳过第一次迭代。它在第一次迭代中不接受任何输入>这有什么问题。我对java非常陌生,所以可能这个问题很难解决:(以下是我的节目为什么在java中读取stdin时跳过第一次迭代?,java,string,stdin,palindrome,Java,String,Stdin,Palindrome,下面的程序总是跳过第一次迭代。它在第一次迭代中不接受任何输入>这有什么问题。我对java非常陌生,所以可能这个问题很难解决:(以下是我的节目 import java.util.*; public class Solution2 { public static void main (String [] args){ String str; int T,length,a; Scanner in = new Scanner(System.in); T = in.
import java.util.*;
public class Solution2 {
public static void main (String [] args){
String str;
int T,length,a;
Scanner in = new Scanner(System.in);
T = in.nextInt(); // no of test cases
int [] oprs = new int [T];
// taking a string
for(int i = 1;i <= T;i++){
str = in.nextLine();
int ops = 1;
char [] array;
array = str.toCharArray();
length = array.length;
if (length % 2 == 0 ){
int k = 1;
for(int j = length/2 ; j < length ;j++ ){
if(array[length/2 - k] != array [j]){
a = Math.abs((int)array[length/2 - k] - (int)array[j]);
ops = ops + a;
}
k++;
}
oprs [i - 1] = ops;
}
else{
int k = 1;
for(int j = (length+1)/2;j < length ; j++){
if(array[(length-1)/2 - k ] != array [j]){
a = Math.abs((int)array[(length-1)/2 - k] - (int)array[j]);
ops = ops + a;
}
k++;
}
oprs [i - 1] = ops;
}
}
for(int i = 0;i < T ;i++){
System.out.println(oprs[i]);
}
}
}
import java.util.*;
公共类解决方案2{
公共静态void main(字符串[]args){
字符串str;
int T,长度,a;
扫描仪输入=新扫描仪(系统输入);
T=in.nextInt();//测试用例数
int[]oprs=新的int[T];
//拿绳子
对于(inti=1;i这里
for(inti=1;i我想这就是你想要的:
import java.util.Scanner;
public class Solution2 {
public Solution2() {
// TODO Auto-generated constructor stub
}
public static void main (String [] args){
String str;
int T,length,a;
Scanner in = new Scanner(System.in);
T = in.nextInt(); // no of test cases
int [] oprs = new int [T];
// taking a string
for(int i=1; i<=T; i++){
//System.out.printf("%d\n",i);
str = in.next();
System.out.println(str);
int ops = 1;
char [] array;
array = str.toCharArray();
length = array.length;
if (length % 2 == 0 ){
int k = 1;
for(int j = length/2 ; j < length ;j++ ){
if(array[length/2 - k] != array [j]){
System.out.printf("%c %c\n",array[length/2 - k] ,array [j]);
a = Math.abs((int)array[length/2 - k] - (int)array[j]);
ops = ops + a;
}
k++;
}
oprs[i - 1] = ops;
}
else{
int k = 1;
for(int j = (length+1)/2;j < length ; j++){
if(array[(length-1)/2 - k ] != array [j]){
a = Math.abs((int)array[(length-1)/2 - k] - (int)array[j]);
ops = ops + a;
}
}
oprs[i - 1] = ops;
}
}
for(int i = 0;i < T ;i++){
System.out.println(oprs[i]);
}
}
}
您必须捕获in.nextInt()的新行,它必须位于以下行之前:
str = in.nextLine();
在这之前
for(int i = 1;i <= T;i++){
用于(int i=1;i什么是有效的输入来测试这一点?这将返回将一个字符串转换为回文所需的迭代次数。T表示我们要检查多少字符串。达恩,你为什么一开始不这么说!你能给我们一个输入和输出示例吗?我根本不知道你在问什么!@Dina有两个解决方案避免在FOR:1的第一次迭代中未读取)。-placeing:str=in.nextLine();before FOR 2)。-更改FOR-by:str=in.next()中的行;说得好,那么op代码的逻辑是完全错误的,必须更改op没有说他的代码做了什么或解释了什么是的,你可以投票给我的评论吗,因为我是对的?他的代码看起来不错。只是现在试一下,但我们需要知道输入值和预期输出……好的,试试也无妨;-)哦,不是这样的。循环的作用是告诉一个循环应该运行多少次。它对任何数组都不起作用。是的,我编辑了代码。问题是它没有使用确定数量的字符串。是的,是:)如果没有问题,请使用我提供的修改后的代码。我使问题更容易理解,我不明白:(@Dina)回车符不是由nextInt使用的。@在第一个FOR之前的Dina将其放入:str=in.nextLine();您的问题将得到解决。这是因为当您输入一个数字,然后按enter键时,input.nextInt()只使用该数字,而不是“行尾”,int、double等基本数据类型不会使用“行尾”,因此此“行尾”保留在缓冲区中,当input.nextLine()执行时,它将使用第一次输入的缓冲区中的“行尾”。@Joselus我不知道发生了什么,但我测试了您所说的内容,不需要输入.nextLine()。我知道您所说的内容,但这里与此无关。
str = in.nextLine();
for(int i = 1;i <= T;i++){