Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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中读取stdin时跳过第一次迭代?_Java_String_Stdin_Palindrome - Fatal编程技术网

为什么在java中读取stdin时跳过第一次迭代?

为什么在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.

下面的程序总是跳过第一次迭代。它在第一次迭代中不接受任何输入>这有什么问题。我对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.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++){