JUma juman Ответов: 2

Дата в каждом файле не появлялась вместе со мной в выходных данных


Правильно ли это программирование или нет
проблема
The group members name, average of prizes and the date in each file did not appear with me in the output 


где проблема во мне код
я не знаю

This question is here and I want to solve it

вопрос
Протестируйте свой проект, используя имена членов вашей группы. В конце концов, мы ожидаем, что у нас будет 3 текста
файлы, содержащие имя участника группы, среднее количество призов и дату в каждом файле. Этот
это должно быть сделано путем вызова метода toFile(String fileName) и имени члена
должен быть передан методу в качестве имени файла

Что я уже пробовал:

package b11;
  
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
import java.util.Scanner;

public class PlayerPrizes {
   
     String playerName;
     int playerId;
     double[] prizes;
     private static int numInstntitd = 0;

     public PlayerPrizes() {
      numInstntitd++;
}
  
     public double prizesAvg(double[] prize) {
         double total = 0;
         for (int i = 0; i < prize.length; i++)
             total = total + prizes[i];
             return total / prizes.length;
     }
      
     public void toFile(String fileName) throws IOException {

         File file = new File(fileName+".txt"); 
         FileOutputStream fos=new FileOutputStream(fileName);
         byte[] b = (this.toString()+" "+this.prizesAvg(this.prizes)+" on "+new Date()).getBytes();
             fos.write(b);
             fos.close();
     }
   
     public static int getPlayerPrizesCount() {
         return numInstntitd;
     }
       
     public String String() {
         return "The player " + playerName + " with id " + playerId + " has won " + prizes.length + " prizes";
     }
       
                     // ** main method **
     public static void main(String[] args) throws IOException {
         
         PlayerPrizes player = new PlayerPrizes();
         Scanner sc = new Scanner(System.in);
         System.out.println("Enter Player id");
         int id = sc.nextInt();
         System.out.println("Enter Player name");
         String name = sc.next();
         System.out.println("Enter 5 Player prizes");
         double[] prizes = new double[5];
         for (int i = 0; i < 5; i++)
              prizes[i] = sc.nextDouble();
              player.playerId = id;
              player.playerName = name;
              player.prizes = prizes;
              System.out.println(player.toString());
              player.toFile(player.playerName);
              System.out.println("num of times PlayerPrizes instantiated : " + getPlayerPrizesCount());
                 
        PlayerPrizes player2 = new PlayerPrizes();
             System.out.println("Enter Player id");
             id = sc.nextInt();
             System.out.println("Enter Player name");
             name = sc.next();
             System.out.println("Enter 5 Player prizes");
             prizes = new double[5];
             for (int i = 0; i < 5; i++)
                 prizes[i] = sc.nextDouble();
                 player2.playerId = id;
                 player2.playerName = name;
                 player2.prizes = prizes;
                 System.out.println(player2.toString());
                 player2.toFile(player2.playerName);
                 System.out.println("num of times PlayerPrizes instantiated : " + getPlayerPrizesCount());                                                                                                                                            
           PlayerPrizes player3 = new PlayerPrizes();
                System.out.println("Enter Player id");
                id = sc.nextInt();
                System.out.println("Enter Player name");
                name = sc.next();
                System.out.println("Enter 5 Player prizes");
                prizes = new double[5];
                for (int i = 0; i < 5; i++)
                        prizes[i] = sc.nextDouble();
                player2.playerId = id;
                player2.playerName = name;
                player2.prizes = prizes;
                System.out.println(player2.toString());
                player2.toFile(player2.playerName);
                System.out.println("num of times PlayerPrizes instantiated : " + getPlayerPrizesCount());
        }
}

Richard MacCutchan

Вам необходимо предоставить более подробную информацию о том, в чем заключается проблема и где она возникает в вашем коде.

2 Ответов

Рейтинг:
2

OriginalGriff

Компиляция не означает, что ваш код верен! :смеяться:
Подумайте о процессе разработки как о написании электронного письма: успешная компиляция означает, что вы написали электронное письмо на правильном языке - например, на английском, а не на немецком, - а не то, что письмо содержало сообщение, которое вы хотели отправить.

Итак, теперь вы входите во вторую стадию разработки (на самом деле это четвертая или пятая, но вы перейдете к более ранним стадиям позже): тестирование и отладка.

Начните с рассмотрения того, что он делает, и как это отличается от того, что вы хотели. Это важно, потому что это дает вам информацию о том, почему он это делает. Например, если программа предназначена для того, чтобы позволить пользователю ввести число, а он удваивает его и печатает ответ, то если ввод / вывод был таким:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Тогда совершенно очевидно, что проблема заключается в бите, который удваивает его - он не прибавляет себя к себе или умножает его на 2, он умножает его на себя и возвращает квадрат входного сигнала.
Таким образом, вы можете посмотреть на код, и очевидно, что он находится где-то здесь:
int Double(int value)
   {
   return value * value;
   }

Как только у вас появится идея, что может пойти не так, начните использовать отладчик, чтобы выяснить, почему. Поместите точку останова в первую строку метода и запустите приложение. Когда он достигнет точки останова, отладчик остановится и передаст управление вам. Теперь вы можете запускать свой код построчно (так называемый "одноступенчатый") и просматривать (или даже изменять) содержимое переменных по мере необходимости (черт возьми, вы даже можете изменить код и повторить попытку, если вам это нужно).
Подумайте о том, что должна делать каждая строка кода перед ее выполнением, и сравните это с тем, что она на самом деле делала, когда вы использовали кнопку "Step over" для выполнения каждой строки по очереди. Он сделал то, что вы ожидали? Если да, то переходите к следующей строке.
Если нет, то почему? Чем это отличается?
Надеюсь, это поможет вам определить, в какой части этого кода есть проблема и в чем она заключается.
Это навык, и его стоит развивать, поскольку он помогает вам как в реальном мире, так и в развитии. И, как и все навыки, он только улучшается при использовании!


JUma juman

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

OriginalGriff

Поэтому протестируйте их и запустите через отладчик, чтобы выяснить, почему существуют проблемы, если вы обнаружите, что они не делают именно то, что вы ожидаете.
Это часть вашей задачи: тестирование и исправление вашего кода-это большая часть разработки!

Рейтинг:
2

Richard MacCutchan

Вы должны использовать a Файловая машина (Java Platform SE 7 )[^] для вывода символьных данных (например, строковых типов Java), а не FileOutputStream, как вы это сделали.


JUma juman

public void toFile(String fileName) вызывает исключение IOException {

File file = новый файл(fileName+".txt");
Записывает Фос=новый автоматически(имя);
байт[] b = (это.метод toString()+" "+это.prizesAvg(это.призы)+" по "+новая дата()).метод getbytes();
Фос.напишите(б);
Фос.рядом();


вот так ?

Richard MacCutchan

Нет, вам нужно записать данные в виде символьных строк, чтобы они были читабельны. Видеть OutputStreamWriter (Java Platform SE 7 )[^] для деталей метода.