Java-буферызацыяй Счытвальнік, Як вы чытаеце радок, выкарыстоўваючы br.readLine (System.in) і пераўтварыць яго ў вугаль?

Я павінен зрабіць праграму крыптаграфіі ў Java, якая прымае лік і радок (як пераменны асобнік) ад карыстальніка і дадае, што лік у ASCII кожнай літары ў радку, каб стварыць новы String.For прыкладу, калі лік 2 і арыгінальная радок «ABCXYZ» ён павінен надрукаваць «CDEZAB» Гэта тое, што я атрымаў да гэтага часу:

import java.io.*;

public class Program12 {

   String str;

   public void encodeDecode() throws IOException

   {

      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

      System.out.println("Input a string");

      str = br.readLine();

      System.out.println("input a number");
      **char a=char.parseChar(br.readLine(System.in));**
      String ustr = str.toUpperCase();
      int l = ustr.length();
      for (int x = 0; x < l; ++x) {
         char t = ustr.charAt(x);
         if (('t' + a) > 90) {
            char c = 90 - 't';
            char p = c - a;
            char d = 65 + p;
            System.out.print(d);
         } else {
            System.out.print('t' + a);
         }
      }
   }
}

але яна працягвае казаць ёсць памылка ў пераўтварэнні радкі ў char.how зрабіць я гэта выправіць?

2
Вы спрабавалі br.read) метад (? ён счытвае з характару уваходнага патоку па характары. і вы можаце праверыць, калі буфер пусты, выкарыстоўваючы у той час як (br.read() = - 1)
дададзена аўтар Hanut, крыніца

8 адказы

Было шмат рэчаў, каб прапанаваць так я змяніў код цалкам згодна з вашым патрабаванні, калі вы не разумееце што-небудзь вы можаце спытаць мяне

public class Program12 {

   String str,newStr="";  
   int num;

   public void encodeDecode() throws IOException

   {

     BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

          System.out.println("Input a string");

          str = br.readLine();
          str.toUpperCase();
          System.out.println("input a number");

          num = Integer.parseInt(br.readLine());
          char ch;int sum;
          for(int i=0;i90)
              {
                  sum=((ch+num)%90%26);
                  if(sum>0)
                      ch=(char)(sum+64);
              }
              else
              {
                  ch=(char)(ch+num);
              }
              newStr=newStr+ch;
          }
          System.out.println("entered str : "+str+" num : "+num+" newstr : "+newStr);
   }
}
4
дададзена
Выхад: увод ўваходных радкі ABCXYZ лік 3 ўвайшлі вул: ABCXYZ Num: 3 NewStr: DEFABC
дададзена аўтар prvn, крыніца

Вы павінны захаваць уведзеныя ў радок, а затым пераўтварыць у масіў сімвалаў

String str = br.readLine();
char[] charArray = str.toCharArray();
2
дададзена
Я згодны з гэтым. Вы можаце выкарыстоўваць Еогеасп пятлю затым.
дададзена аўтар Joetjah, крыніца
я не даведаўся масівы yet.Thanks ў любым выпадку :)
дададзена аўтар aqua, крыніца

Новы функцыянал і больш кароткі стыль атрымліваць поўную радок будзе

Try/злавіць блок быў прапушчаны. Вы можаце выклікаць гэты метад і прачытаць кожны знак традыцыйным спосабам (з выкарыстаннем String.tocharArray ()) на зададзеным што вяртаецца радкі, нават калі вам трэба прачытаць кожны знак. Гэты метад вяртае поўную радок.

   public String getValue(){

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        return br.lines().collect(Collectors.joining(System.lineSeparator()));
        }
2
дададзена

Так як а з'яўляецца Integer , змяніць яго на:

 System.out.println("input a number");
 int a  =  Integer.parseInt(br.readLine());

тады:

 String res = "";//stores the result
      for (int x = 0; x < l; ++x) {
          char t = ustr.charAt(x);
              //check after adding the number, still is a letter
             //35 is for 'Z'
          if(Character.getNumericValue(t) + a < 36)
              res += (char)(t + a);
          else{
              res += (char)(t + a - 26);
          }
      }
      System.out.println(res);
1
дададзена

Вы не можаце пераўтварыць Радок у сімвал , таму што радок утрымлівае некалькі знакаў. Калі вы чакалі атрымаць першы сімвал радкі, то вам трэба выкарыстоўваць Шар <�код /> метад. Пераканайцеся ў тым, каб праверыць даўжыню радка першай, ці вы атрымаеце StringIndexOutOfBoundsException :

String str = br.readLine(System.in);
char a = str.length() > 0 ? str.charAt(0) : '\0';
0
дададзена
public static void encodeDecode() throws IOException {

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    System.out.println("Input a string");
    //Get a char array from String input.
    char[] chars = br.readLine().toCharArray();


    System.out.println("input a number");
    //Read increment as String and convert to int
    int increment = Integer.parseInt(br.readLine()  );

    for (char c : chars) {
        System.out.println((char)((c + increment > 90) ?((90 - c)+65):c+increment));
    }
}
0
дададзена
што, калі уведзенае лік 100 або што-небудзь вышэй 26
дададзена аўтар prvn, крыніца

Замест таго, каб рабіць

System.out.println("input a number");
char a=char.parseChar(br.readLine(System.in));

Паспрабуйце гэта для атрымання аднаго сімвала

System.out.println("input a number");
String abc=br.readLine(System.in);
char a=abc.charAt(0);
0
дададзена
public class crypt {

    /**
     * @param args
     */
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str;
        System.out.println("enter the string");
        str=br.readLine();
        String ustr=str.toUpperCase();
        System.out.println("upper case string is");
        System.out.println(ustr);
        int l= ustr.length();
        System.out.println("enter the number");
        int n=Integer.parseInt(br.readLine()) ;


        for(int i=0; i90)
            {
                int q=((y)%90);
                char h=(char)(64+q);
                System.out.print(h);

            }
            else
                System.out.print((char)y);


        }



    }

}
0
дададзена
Я спадзяюся, што гэта будзе працаваць.
дададзена аўтар user3737324, крыніца