Что-то не так с моим отступом? - PullRequest
0 голосов
/ 19 ноября 2018

Это может быть не по теме, но мой учитель недавно сказал, что мой отступ был неправильным, но дал очень смутную причину того, что было неправильно, и я не думаю, что что-то не так с моим отступом, когда я кодирую. Ниже приведена программа, которую я написал, и мой учитель сказал, что отступы раздражают и неправильно читаются.

    import java.util.Scanner; 

    public class SecretCode {


    public static boolean isValidLength (String stringChecker) // Checks to see is user the String that was input by the user is valid. 
    {
        if (stringChecker.length() >= 2 && stringChecker.length() <= 12) // Determines how long the String is. 
        {
            return true; // It is valid. 
        }
        else 
        {
            return false; // It is invalid. 
        }
    }

    public static int charToAscii (String stringToAscii) // Converts the String inputted by the user and converts it to an Ascii value. The values are stored and return as an int. 
    {
        int stringValue = 0;
        for (int x = 0; x < stringToAscii.length(); x++) // Loop to parse through the String and add all the Ascii values. 
        {
            stringValue += (int) stringToAscii.charAt(x); // Adder. 
        }

        return stringValue; // Returns final value of String. 
    }

    public static int getNumDigits (int totalDigits) // Gets the total number of digits in an int. 
    {
        return (int) (Math.log10(totalDigits) + 1); // This will return the total amount of digits using a logarithmic function You can also do String.valueOf(totalDigits).length(); 
    }

    public static String getSecretCode (int secretCodeConversion) // Converts Ascii values into two separate characters. 
    {
        String secretCode = new String (); // String instantiation. Proper syntax for declaring a String. There is not 

        int num1, num2; // Variable declaration

        num1 = (secretCodeConversion % 10000) / 100; // Splits the numbers into two. This gets first two digits.
        num2 = (secretCodeConversion % 100); // Second two digits.

        if (num1 <= 65)
        {
            num1 += 61; // Ensures a letter is possible.
        }
        if (num2 <= 65)
        {
            num2 += 61; // Ensures a letter is possible for num2. This could have been short-circuited by an 'or' operator. 
        }

        secretCode += Character.toString((char) num1) + Character.toString((char) num2); // Concatenates the two numbers back into a String.

        return secretCode; // Return secret code. 
    }


    public static void main(String[] args) {
        String secretCode = new String (); // User input
        Scanner sc = new Scanner (System.in); // Instantiates Scanner object to read input. 
        System.out.println ("Please enter the String you would like to make a secret code?");
        secretCode = sc.next(); // Input

        while (isValidLength(secretCode) == false) // Checks to see low long secret message it is to make sure it is valid. 
        {
            System.out.println ("Please enter the String you would like to make a secret code?");
            secretCode = sc.next(); // Loops until true. 
        }

        sc.close(); // No more need for Scanner.

        int sumOfDigits = charToAscii(secretCode); // Data for output requirements. 

        if (getNumDigits(sumOfDigits) % 2 != 0)
        {
            sumOfDigits *= 10; 
        }

        if (sumOfDigits <= 4000)
        {
            sumOfDigits *= 4;
        }

        if (getNumDigits(sumOfDigits) % 2 != 0)
        {
            sumOfDigits /= 10;
        }

        System.out.println();
        System.out.println();

        System.out.println ("Your Secret Coded Message Is: " + getSecretCode(sumOfDigits));

        System.out.println();
        System.out.println();

        System.out.println ("Additional Data:");
        System.out.println ("_______________________");

        System.out.println ("String Input: " + '"' + secretCode + '"');
        System.out.println ("Sum of Ascii Codes: " + charToAscii(secretCode));
        System.out.println ("Secret Code in Ascii Numbers " + sumOfDigits);
    }
} // This bracket is part of the code, but I could not get the formatting to work. 

Мой учитель сказал, что все было на левой границе, но я считаю, что вещам, которые находятся на левой границе, больше некуда идти. Я смотрел на других программистов, смотрел другой код Java на Github и думаю, что все делаю правильно. Я не знаю, о чем она говорила?

Ответы [ 3 ]

0 голосов
/ 19 ноября 2018

Ваши методы не имеют отступов внутри класса. Кажется, они находятся на том же уровне, что и класс в вашем коде. Отступ уровня другого метода выглядит хорошо. Попробуйте отформатировать его в вашей IDE, и вы увидите разницу. Структура должна быть похожа на ниже.

class Order
{
    // fields

    // constructors

    // methods
}
0 голосов
/ 19 ноября 2018

Не так давно я рассмотрел Java Coding Conventions от таких компаний, как Oracle, Google, Twitter и Spring.Удивительно, но когда дело доходит до indentation и formatting, можно сказать немного, и вот краткое резюме и полезные ссылки, которые могут помочь вам написать код easy to read и maintainable.

Я написал короткую статью о лучших методах Java-кодирования для тех, кто заинтересован, чтобы узнать больше.

  1. 2-4 пробела для отступа (Google рекомендует +2 пробела)
  2. Рекомендуемый диапазон длины строки должен быть между 70 to 120 (max)
  3. Когда речь идет о переносе строкbreak after comma и before an operator
  4. Держите открывающую скобку { в конце той же строки, что и подпись метода и ключевых слов (т. е. если, для ключевых слов и т. д.)
  5. Использованиеend of line comments // только когда у вас есть несколько слов, чтобы сказать о линии.Если длина комментария превышает несколько слов, вы должны использовать /* */ или /* */ для многострочного комментария
  6. Если сигнатура метода длинная, то перейти на новую строку и использовать 8 spacesРазличить аргументы метода и тело методамежду зарезервированными ключевыми словами (т. е. если, для) и круглыми скобками - это поможет легко визуально различить метод и другие конструкции
  7. Методы разделены пустой строкой
  8. После пробела должно появиться пустое местозапятая в списке аргументов
  9. пробел operators (i.e. +,-,%, etc.) and = `
  10. Многие другие - смотрите ссылки ниже

Вот ваш код с использованием некоторых из приведенных выше пунктов

import java.util.Scanner; 

public class SecretCode {

    // Checks to see is user the String that was input by the user is valid.

    public static boolean isValidLength(String stringChecker) {
        // Determines length check
        if ((stringChecker.length() >= 2) && (stringChecker.length() <= 12)) { 
            return true;
        } else {
            return false; 
        }
    }

    /* 
     * Converts the String inputted by the user and converts it to an Ascii value. 
     * The values are stored and return as an int. 
     */
    public static int charToAscii (String stringToAscii) {
        int stringValue = 0;

        // Loop to parse through the String and add all the Ascii values. 

        for (int x = 0; x < stringToAscii.length(); x++) {
            stringValue += (int) stringToAscii.charAt(x); // Adder. 
        }

        return stringValue; 
    }

    /* 
    * Gets the total number of digits in an int.  
    * This will return the total amount of digits using a logarithmic function You 
    * can also do String.valueOf(totalDigits).length();
    */

    public static int getNumDigits (int totalDigits)  {
        return (int) (Math.log10(totalDigits) + 1); 
    }

    // Converts Ascii values into two separate characters.

    public static String getSecretCode (int secretCodeConversion) {
        String secretCode = new String (); 

        // Splits the numbers into two. This gets first two digits
        int num1 = (secretCodeConversion % 10000) / 100; 

        // Second two digits - use proper variable naming i.e. firstTwoDigits, secondDigits etc.
        int num2 = (secretCodeConversion % 100);

        if (num1 <= 65)  {
            num1 += 61; // Ensures a letter is possible.
        }
        if (num2 <= 65) {
            // Ensures a letter is possible for num2. This could have been short-circuited by an 'or' operator.
            num2 += 61;  
        }

        secretCode += Character.toString((char) num1) + Character.toString((char) num2); 

        return secretCode; 
    }

    public static void main(String[] args) {
        String secretCode = new String (); 

        // Instantiates Scanner object to read input. 
        Scanner sc = new Scanner (System.in); 

        System.out.println ("Please enter the String you would like to make a secret code?");
        secretCode = sc.next();

        // Checks to see low long secret message it is to make sure it is valid. 

        while (isValidLength(secretCode) == false) {
            System.out.println ("Please enter the String you would like to make a secret code?");
            secretCode = sc.next(); // Loops until true. 
        }

        sc.close(); // No more need for Scanner.

        int sumOfDigits = charToAscii(secretCode); 

        if (getNumDigits(sumOfDigits) % 2 != 0) {
            sumOfDigits *= 10; 
        }

        if (sumOfDigits <= 4000) {
            sumOfDigits *= 4;
        }

        if (getNumDigits(sumOfDigits) % 2 != 0) {
            sumOfDigits /= 10;
        }

        System.out.println();
        System.out.println();

        System.out.println ("Your Secret Coded Message Is: " + getSecretCode(sumOfDigits));

        System.out.println();
        System.out.println();

        System.out.println ("Additional Data:");
        System.out.println ("_______________________");

        System.out.println ("String Input: " + '"' + secretCode + '"');
        System.out.println ("Sum of Ascii Codes: " + charToAscii(secretCode));
        System.out.println ("Secret Code in Ascii Numbers " + sumOfDigits);
    }
} 

Вот некоторые вещи, которые вы могли бы улучшить в своем коде

  • С чрезмерным комментарием - иногда понятно, что делает строка, не добавляйте commeНет, добавляйте комментарии только тогда, когда код сложный и трудно читать
  • Именование переменной, облегчить понимание того, что хранит переменная
  • Отступ
  • Использование типакомментариев
  • Отсутствие комментариев Javadoc

В вашем коде также есть много положительных моментов.Мне нравится метод именования, то, как вы разделили его на методы.Вы находитесь на правильном пути, прочитайте некоторые из следующих соглашений кодирования для Java, и все готово.

Руководство по стилю Oracle Java - https://www.oracle.com/technetwork/java/codeconventions-150003.pdf

Руководство по стилю Google Java - https://google.github.io/styleguide/javaguide.html

Руководство по стилю Spring Framework - https://github.com/spring-projects/spring-framework/wiki/Code-Style

Твиттер Руководство по стилю Java - https://github.com/twitter/commons/blob/master/src/java/com/twitter/common/styleguide.md

0 голосов
/ 19 ноября 2018

Отступ - это особый стандарт, которому мы одинаково следуем в коде во всех классах. Для начала могу сказать

  1. Ваш стиль комментирования не читается на ширине экрана.
  2. Начало и закрытие цветочных скобок не одинаковы, например: см. Основной метод.

Сказав, что любой может иметь свой собственный стиль форматирования и отступа, в этом нет ничего плохого.

...