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

时间:2014-10-26 02:37:04

标签: java string stdin palindrome

下面的程序总是跳过第一次迭代。它在第一次迭代中没有任何输入>这有什么问题。我是java新手所以mabe这个问题可能非常蹩脚。 :(以下是我的计划

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]);
    }
}
}

这是预期的输入和输出

样本输入
3 ABC ABCBA abcd

输出 2 0 4

这就是我得到的 3 ABC ABCD

它让我给第三个输入。 产量 1 3 5

3 个答案:

答案 0 :(得分:1)

下面

   for(int i = 1;i <= T;i++){

您忽略了索引i = 0,因为您的起点是i = 1,因此将错过第一次迭代。

提醒您,在 Java 中,数组索引从0而不是1开始。

答案 1 :(得分:1)

您必须捕获in.nextInt()的新行,必须在以下行之前:

str = in.nextLine();
在FOR

之前

for(int i = 1;i <= T;i++){

答案 2 :(得分:0)

我认为这就是你想要的:

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]);
        }
    }
}

尝试输入:3 abc abcba abcd
这就是结果:

abc
abcba
abcd
b c
a d
3
2
5