Ir ao conteúdo
  • Cadastre-se

Joanderson Pereira

Membros Plenos
  • Total de itens

    25
  • Registro em

  • Última visita

  • Qualificações

    N/D
  1. Você não falou para quê serve esse programa, ou qual o erro que você encontrou nele. Comentei o código todo, e acredito que o problema que você encontrou esteja na linha 21. É sempre bom comentar o código e imprimir textos informando para o usuário o que diabos está acontecendo. import java.util.Scanner; public class Main10 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("Quantas vezes o programa deve repetir?"); int t = scan.nextInt();// O valor de t define quantas vezes o loop continuará int min; while(t-- !=0) { //System.out.println("Quantos inteiros irão ser digitados?"); //int n = scan.nextInt() - 1; //Essa é uma maneira de pedir essa informação para o usuário System.out.println("Qual o comprimento do vetor?"); int n = scan.nextInt();// O valor de n define quantos arrays o vetor r terá int[] r = new int[n]; min = 10000; //Aqui o usuário insere o valor de cada array for(int i=0; i<r.length; i++) { // Dessa maneira o último array fica vazio, o certo seria System.out.println("Digite um inteiro: ");//for(int i=0; i<=r.length; i++) r[i] = scan.nextInt(); } for(int i=0; i<r.length; i++) {// min é reduzido para um valor menor/igual que r[i] while(r[i]%min != 0) { min--; } } for(int i =0; i<n; i++) {// O valor de cada array é divido por min r[i]= r[i]/min; System.out.printf("O valor da posição %d foi alterado \n", i); } for(int i =0; i<n; i++) {//Aqui ele exibe o novo valor de cada array System.out.print(r[i]+" "); } } } } Qualquer coisa não hesite em perguntar.
  2. Fiz o que você disse, o que estava faltando mesmo era deixar as variáveis acessíveis a partir da classe (algo que eu não sabia). Quando o método main reexecutava linhas como essas: //números aleatórios double m1[] = new double [41]; double m2[] = new double [41]; double m3[] = new double [41]; double m4[] = new double [41]; Ele redefinia seus valores como zero, agora elas são declaradas antes da função main, mantendo dessa forma o valores definidos na primeira vez. Sobre a questão do array 0 está vazio, como são 40 alunos (1 - 40) quis deixar o índice do vetor correspondendo à posição do aluno. Mas eu corrigi isso adicionando um (i + 1) na saída. Criar outros métodos ajudou bastante, porém não vi necessidade de criar novos métodos para o menu 2. Prometo da uma olhada nesse vídeo que me recomendastes. Segue o código corrigido a seguir: import java.util.Scanner; import java.util.Random; public class Quest05 { private static Scanner scanner = new Scanner (System.in); //números aleatórios private static double m1[] = new double [40]; private static double m2[] = new double [40]; private static double m3[] = new double [40]; private static double m4[] = new double [40]; private static double start = 0; private static double end = 10; private static int repeat = 0;//loop private static boolean nextBreak = false; //preencher notas public static void preencherNotas() { //new Random().nextDouble() for (int i = 0; i < m1.length; i++) { //double aleatório de 0 - 1; m1[i] = start + (new Random().nextDouble() * (end - start)); } for (int i = 0; i < m2.length; i++) { m2[i] = start + (new Random().nextDouble() * (end - start)); } for (int i = 0; i < m3.length; i++) { m3[i] = start + (new Random().nextDouble() * (end - start)); } for (int i = 0; i < m4.length; i++) { m4[i] = start + (new Random().nextDouble() * (end - start)); } } public static double eDouble(String str) { double valid; try { str = str.replace(",", "."); valid = Double.parseDouble(str); } catch (NumberFormatException e) { valid = 121; } return valid; } public static int eInteger(String str) { int valid; try { valid = Integer.parseInt(str); } catch (NumberFormatException e) { valid = 121; } return valid; } public static boolean loop(String restart) { // menu sim ou não char temp = 'd'; boolean end = false; while (temp != 's') { //O loop só é quebrado se o usuário entrar com 's'ou 'n' if (restart.length() > 1 || restart.equalsIgnoreCase("")) restart = "p"; temp = restart.charAt(0); if (temp == 'n') { end = true; //encerra o programa break; } else if (temp != 's') { System.out.println("Opção inválida!!"); restart = scanner.nextLine(); } } return end; } //receber notas public static void receberNotas(double m[]) { nextBreak = false; for (int i = 0; i < m.length; i++) { String nota = "j"; int loop2 = 0; while (loop2 == 0) { System.out.println("Digite a primeira nota do aluno " + (i + 1)); nota = scanner.nextLine(); if (nota.equals("Sair")) { System.out.println("Fim de Programa."); repeat++; nextBreak = true; break; } else if (eDouble(nota) >= 0 && eDouble(nota) <= 10) { m[i] += eDouble(nota); loop2++; } else { System.out.println("Valor digitado inválido!"); System.out.println("Deseja tentar inserir esta nota novamente?"); String answer = scanner.nextLine(); if (loop(answer)) { loop2++; m[i] = 0; } } } if (nextBreak) break; } } public static void main(String[] args) { boolean newOption = false; System.out.println("Bem vindo ao Medianator 4000!!!"); // Boas vindas System.out.println("Tecle [ENTER] para continuar: "); String enter = "nada"; while (!enter.equals("")) { enter = scanner.nextLine();//vai ler o que o usuário digitar //O loop só é quebrado se o usuário entrar com \n if (enter.equals("")) break; } while (repeat == 0) { nextBreak = false; //menu 1 System.out.println("Escolha a opção desejada: "); if (newOption) System.out.println("0 - Utilizar banco de dados existente "); System.out.println("1 - Gerar novo banco de dados"); System.out.println("2 - Inserir novos dados"); System.out.println("3 - Sair"); String op = "e"; int menu1 = 0; while (menu1 == 0) { op = scanner.nextLine(); int option = eInteger(op); if (!newOption && option == 0) option = 121; switch (option) { case 0: menu1++; break; case 1: //As médias são preenchidas com números aleatórios preencherNotas(); menu1++; break; case 2:// O usuário insere as notas de cada media System.out.println("Primeira avaliação."); System.out.println("Digite 'Sair' a qualquer momento para encerrar a aplicação."); receberNotas(m1); if (nextBreak) break; else System.out.println(nextBreak); System.out.println("Segunda avaliação."); System.out.println("Digite 'Sair' a qualquer momento para encerrar a aplicação."); receberNotas(m2); if (nextBreak) break; System.out.println("Terceira avaliação."); System.out.println("Digite 'Sair' a qualquer momento para encerrar a aplicação."); receberNotas(m3); if (nextBreak) break; System.out.println("Quarta avaliação."); System.out.println("Digite 'Sair' a qualquer momento para encerrar a aplicação."); receberNotas(m4); menu1++; break; case 3: System.out.println("Fim de Programa."); repeat ++; nextBreak = true; break; default: System.out.println("Opção inválida tente novamente!!"); break; } if (nextBreak) break; } if (nextBreak) break; //menu 2 int menu2 = 1; System.out.println("Escolha um opção: "); System.out.println("1 - Exibir média anual de cada aluno"); System.out.println("2 - Exibir média da turma"); System.out.println("3 - Exibir média de um aluno específico"); System.out.println("4 - Voltar para o menu anterior"); do { op = scanner.nextLine(); int option2 = eInteger(op); double mediaAlunos[] = new double [40]; double sum = 0; double mediaTurma = 0; if (option2 != 4) { for (int i = 0; i < 40; i++) { // Calcula a média de cada aluno mediaAlunos[i] = (m1[i] + m2[i] + m3[i] + m4 [i]) / 4; } } switch (option2){ case 1: System.out.println("A média de cada aluno: "); for (int i = 0; i < 40; i++) { System.out.println("Aluno " + (i + 1)); System.out.printf(" %.2f\n", mediaAlunos[i]); } menu2++; break; case 2: for(int i2 = 0; i2 < mediaAlunos.length; i2++){ sum = sum + mediaAlunos[i2]; } mediaTurma = sum / 40; System.out.println("A média da turma é: "); System.out.printf(" %.2f\n", mediaTurma); menu2++; break; case 3: int aluno = 0; int selectThis = 0; while (selectThis == 0) { System.out.println("Digite o número do aluno desejado: "); op = scanner.nextLine(); aluno = eInteger(op); if (aluno > 0 && aluno <= 40) { System.out.printf("A média do aluno %d é: %.2f \n", aluno, mediaAlunos[aluno - 1]); menu2++; break; } else { System.out.println("Aluno inexistente!"); System.out.println("Deseja tentar novamente?"); String answer = scanner.nextLine(); if (loop(answer)) selectThis++; } } break; case 4: repeat = 0; menu2++; break; default: System.out.println("Opção inválida!"); menu2 = 0; break; } if (option2 >= 0 && option2 < 4) { newOption = true; System.out.println("Deseja continuar(s/n)? "); int v = 0; String restart = scanner.nextLine(); while (v == 0) { if (loop(restart)) { System.out.println("Fim de Programa."); v++; repeat++; } else v++; } } }while (menu2 == 0); } } }
  3. Sou iniciante em Java, esse código calcula e exibe a média de quatro notas (cada uma armazenada em um vetor). Possui dois menus: menu 1: 1 - Gerar dados - (Os vetores são preenchidos com doubles aleatórios de 0-10) 2 - Inserir dados - (O usuário insere o valor de cada vetor) 3 - Sair menu 2: 1 - Exibir a média anual de cada aluno 2 - Exibir média da turma 3 - Exibir média de um aluno específico 4 - Voltar ao menu anterior Após o passar pelo segundo menu (escolhendo 1, 2 ou 3) o usuário tem a opção continuar (loop), quando isso acontece o menu 1 ganha uma nova opção: 0 - Utilizar banco de dados existente. (Essa opção pularia a definição de valores dos vetores (pois eles já estariam definidos)) Agora chegamos no problema: Ao invés de manter os dados definidos anteriormente, eles (os vetores) estão ficando vazios, retornando 0,00. Como manter os dados informados na primeira repetição do loop? Segue aí o código: import java.util.Scanner; import java.util.Random; public class Quest05 { public static double eDouble(String str) { double valid; try { str = str.replace(",", "."); valid = Double.parseDouble(str); } catch (NumberFormatException e) { valid = 121; } return valid; } public static int eInteger(String str) { int valid; try { valid = Integer.parseInt(str); } catch (NumberFormatException e) { valid = 121; } return valid; } public static boolean loop(String restart) { // menu sim ou não Scanner scanner = new Scanner (System.in); char temp = 'd'; boolean end = false; while (temp != 's') { //O loop só é quebrado se o usuário entrar com 's'ou 'n' if (restart.length() > 1 || restart.equalsIgnoreCase("")) restart = "p"; temp = restart.charAt(0); if (temp == 'n') { end = true; //encerra o programa break; } else if (temp != 's') { System.out.println("Opção inválida!!"); restart = scanner.nextLine(); } } return end; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); boolean newOption = false; System.out.println("Bem vindo ao Medianator 4000!!!"); // Boas vindas System.out.println("Tecle [ENTER] para continuar: "); String enter = "nada"; while (!enter.equals("")) { enter = scanner.nextLine();//vai ler o que o usuário digitar //O loop só é quebrado se o usuário entrar com \n if (enter.equals("")) break; } int repeat = 0;//loop while (repeat == 0) { boolean nextBreak = false; //números aleatórios double m1[] = new double [41]; double m2[] = new double [41]; double m3[] = new double [41]; double m4[] = new double [41]; //menu 1 System.out.println("Escolha a opção desejada: "); if (newOption) System.out.println("0 - Utilizar banco de dados existente "); System.out.println("1 - Gerar novo banco de dados"); System.out.println("2 - Inserir novos dados"); System.out.println("3 - Sair"); String op = "e"; int menu1 = 0; while (menu1 == 0) { op = scanner.nextLine(); int option = eInteger(op); if (!newOption && option == 0) option = 121; //new Random().nextDouble(); //double aleatório de 0 - 1; double start = 0; double end = 10; switch (option) { case 0: menu1++; break; case 1: //As médias são preenchidas com números aleatórios for (int i = 1; i < m1.length; i++) { m1[i] += start + (new Random().nextDouble() * (end - start)); } for (int i = 1; i < m2.length; i++) { m2[i] += start + (new Random().nextDouble() * (end - start)); } for (int i = 1; i < m3.length; i++) { m3[i] += start + (new Random().nextDouble() * (end - start)); } for (int i = 1; i < m4.length; i++) { m4[i] += start + (new Random().nextDouble() * (end - start)); } menu1++; break; case 2:// O usuário insere as notas de cada media String nota = "j"; System.out.println("Primeira avaliação."); System.out.println("Digite 'Sair' a qualquer momento para encerrar a aplicação."); for (int i = 1; i < m1.length; i++) { int loop2 = 0; while (loop2 == 0) { System.out.println("Digite a primeira nota do aluno " + i); nota = scanner.nextLine(); if (nota.equals("Sair")) { System.out.println("Fim de Programa."); repeat++; nextBreak = true; break; } else if (eDouble(nota) >= 0 && eDouble(nota) <= 10) { m1[i] += eDouble(nota); loop2++; } else { System.out.println("Valor digitado inválido!"); System.out.println("Deseja tentar inserir esta nota novamente?"); String answer = scanner.nextLine(); if (loop(answer)) { loop2++; m1[i] = 0; } } } if (nextBreak) break; } if (nextBreak) break; System.out.println("Segunda avaliação."); System.out.println("Digite 'Sair' a qualquer momento para encerrar a aplicação."); for (int i = 1; i < m2.length; i++) { int loop2 = 0; while (loop2 == 0) { System.out.println("Digite a segunda nota do aluno " + i); nota = scanner.nextLine(); if (nota.equals("Sair")) { System.out.println("Fim de Programa."); repeat++; nextBreak = true; break; } else if (eDouble(nota) >= 0 && eDouble(nota) <= 10) { m2[i] += eDouble(nota); loop2++; } else { System.out.println("Valor digitado inválido!"); System.out.println("Deseja tentar inserir esta nota novamente?"); String answer = scanner.nextLine(); if (loop(answer)) { loop2++; m2[i] = 0; } } } if (nextBreak) break; } if (nextBreak) break; System.out.println("Terceira avaliação."); System.out.println("Digite 'Sair' a qualquer momento para encerrar a aplicação."); for (int i = 1; i < m3.length; i++) { int loop2 = 0; while (loop2 == 0) { System.out.println("Digite a terceira nota do aluno " + i); nota = scanner.nextLine(); if (nota.equals("Sair")) { System.out.println("Fim de Programa."); repeat++; nextBreak = true; break; } else if(eDouble(nota) >= 0 && eDouble(nota) <= 10) { m3[i] += eDouble(nota); loop2++; } else { System.out.println("Valor digitado inválido!"); System.out.println("Deseja tentar inserir esta nota novamente?"); String answer = scanner.nextLine(); if (loop(answer)) { loop2++; m3[i] = 0; } } } if (nextBreak) break; } if (nextBreak) break; System.out.println("Quarta avaliação."); System.out.println("Digite 'Sair' a qualquer momento para encerrar a aplicação."); for (int i = 1; i < m4.length; i++) { int loop2 = 0; while (loop2 == 0) { System.out.println("Digite a quarta nota do aluno " + i); nota = scanner.nextLine(); if (nota.equals("Sair")) { System.out.println("Fim de Programa."); repeat++; nextBreak = true; break; } else if (eDouble(nota) >= 0 && eDouble(nota) <= 10) { m4[i] += eDouble(nota); loop2++; } else { System.out.println("Valor digitado inválido!"); System.out.println("Deseja tentar inserir esta nota novamente?"); String answer = scanner.nextLine(); if (loop(answer)) { loop2++; m4[i] = 0; } } } if (nextBreak) break; } menu1++; break; case 3: System.out.println("Fim de Programa."); repeat ++; nextBreak = true; break; default: System.out.println("Opção inválida tente novamente!!"); break; } if (nextBreak) break; } if (nextBreak) break; //menu 2 int menu2 = 1; System.out.println("Escolha um opção: "); System.out.println("1 - Exibir média anual de cada aluno"); System.out.println("2 - Exibir média da turma"); System.out.println("3 - Exibir média de um aluno específico"); System.out.println("4 - Voltar para o menu anterior"); do { op = scanner.nextLine(); int option2 = eInteger(op); double mediaAlunos[] = new double [41]; double sum = 0; double mediaTurma = 0; if (option2 != 4) { for (int i = 1; i < 41; i++) { // Calcula a média de cada aluno mediaAlunos[i] = (m1[i] + m2[i] + m3[i] + m4 [i]) / 4; } } switch (option2){ case 1: System.out.println("A média de cada aluno: "); for (int i = 1; i < 41; i++) { System.out.println("Aluno " + i); System.out.printf(" %.2f\n", mediaAlunos[i]); } menu2++; break; case 2: for(int i2 = 1; i2 < mediaAlunos.length; i2++){ sum = sum + mediaAlunos[i2]; } mediaTurma = sum / 40; System.out.println("A média da turma é: "); System.out.printf(" %.2f\n", mediaTurma); menu2++; break; case 3: int aluno = 0; int selectThis = 0; while (selectThis == 0) { System.out.println("Digite o número do aluno desejado: "); op = scanner.nextLine(); aluno = eInteger(op); if (aluno > 0 && aluno < 41) { System.out.printf("A média do aluno %d é: %.2f \n", aluno, mediaAlunos[aluno]); menu2++; break; } else { System.out.println("Aluno inexistente!"); System.out.println("Deseja tentar novamente?"); String answer = scanner.nextLine(); if (loop(answer)) selectThis++; } } break; case 4: repeat = 0; menu2++; break; default: System.out.println("Opção inválida!"); menu2 = 0; break; } if (option2 >= 0 && option2 < 4) { newOption = true; System.out.println("Deseja continuar(s/n)? "); int v = 0; String restart = scanner.nextLine(); while (v == 0) { if (loop(restart)) { System.out.println("Fim de Programa."); v++; repeat++; } else v++; } } }while (menu2 == 0); } } }
  4. Resolveu todos os problemas relacionados a esse assunto. Entendi que cada caso é um caso quando se fala sobre como tratar exceção. Declaro por tanto encerrado esse tópico. Agradeço aos envolvidos
  5. Nunca usei try e o catch (nem o Buffered e o throw new), só sei que se ele falha na execução de alguma instrução do bloco try ele pula para o bloco catch, se puder me explicar como o código funciona me ajudaria muito. Pelo que eu entendi por padrão é sempre ler como String, faz a validação para então converter para o formato desejado. Para o meu problema eu usei esse dois códigos aí embaixo, que deram para o gasto. public static boolean valida(String k) { boolean numero = k.matches("[0-9]+");//Se houver apenas números nesta String retorna true return numero; } public static boolean valida(String k) { boolean numero = k.matches("[0-9]+");//Se conter apenas números na String retorna true int pos = k.indexOf("-");//Se "-" é o primeiro caractere retorna 0 if (!numero && pos == 0)// Fiz algo parecido com relação ao ponto/vírgula para validar double numero = true; return numero; }
  6. Sou iniciante em Java, estou testando como fazer validação de dados, até o momento eu pegava o que o usuário digitava e jogava em switch, case, if e tralala... Agora me deparei com isso: " double b = scanner.nextDouble(); Ao executar esse tipo de linha de código o programa só prossegue se receber a informação do usuário; Caso seja fornecido caracteres não numéricos, o programa da pau (não é possível guardar letras nesse formato obviamente) e encerra, não sendo possível realizar a validação da mesma forma que eu vinha fazendo. Noto que existe um espaço para parâmetros em: scanner.nextDouble(); É possível realizar esse tipo de verificação com algum parâmetro? Seja qual for a forma, quero descobrir maneiras de impedir que variáveis numéricas tentem receber letras.
  7. Resolveu todos os problemas relacionados ao loop. Declaro por tanto encerrado esse tópico. Agradeço aos envolvidos
  8. Tentei adicionar o <limits>, acontece que ele deu problema com o <windows.h>, ambos utilizam terminações como max e min em suas bibliotecas, para resolver precisava usar #infdef, #define, #endif (meio que definindo qual é qual). Coisas complicadas até demais para mim no momento, então optei por abandonar o windows.h. Só usava o windows.h por causa de Sleep, que por sua vez eu usava por não conseguir usar o sleep normal (vários post na internet estão desatualizados e para usuários com esse problema eles indicam usar o windows.h) no fim descobri que a forma correta no C++ é usleep. Agora vamos para o código: #include <iostream> #include <stdlib.h> // alterações no início e no fim #include <unistd.h> #include <time.h> #include <limits> using namespace std; int wait = 50000; int createZombie() { if (rand() % 67 > 65) { return 21; } if (rand() % 67 < 10) return 11; else return rand() %10 + 1; } int chance() { return rand() % 100; } int main() { srand(time(NULL)); char again; // game stats int playerAlive = true; int playerSkill = 9; int playerScore = 1; string playerName = ""; int zombieCount = 0; int zombiesKilled = 0; again = 'y'; int revive = false; char restart; int deathlyZombie = false; int hugeZombie = false; int skinnyZombie = false; while (again == 'y') { // title cout << "Welcome to Zombie War 1.0" << endl << "Press [ENTER] to start."; char temp = 'x'; while (temp != '\n') cin.get(temp); // player name cout << "Please enter your name: "; cin >> playerName; //ask how many zombies cout << "How many zombies do you wish to fight? "; cin >> zombieCount; cout << "Get ready to fight for your life, " << playerName << "!" << endl; // main game loop while (playerAlive && zombiesKilled < zombieCount) { // create a random zombie int zombieSkill = createZombie(); int luck = chance(); // battle sequence if (zombieSkill > 20) { cout << endl << "Here comes a deathly warrior zombie!!!" << endl; deathlyZombie = true; usleep (wait); } else { if (zombieSkill > 10 && zombieSkill < 20) { cout << endl << "Here comes a huge zombie!" << endl; hugeZombie = true; usleep (wait); } else { cout << endl << "Here comes zombie " << zombiesKilled + 1 << endl; skinnyZombie = true; usleep (wait); } } cout << "Fighting"; usleep (wait / 2); cout << "." ; usleep (wait / 2); cout << "." ; usleep (wait / 2); cout << "." << endl; usleep(wait); //balance if (playerSkill > 50 && luck < 50) { zombieSkill = zombieSkill + 40; playerSkill = playerSkill - 1; cout << "The battle is so hard..." << endl; usleep (2 * wait); } if (playerSkill > 100 && luck < 20) { zombieSkill = zombieSkill + 90; cout << "You keep fighting, but the end is coming..." << endl; usleep (2 * wait); } if (zombieCount > 100 && luck < 10) { playerSkill = playerSkill - 10; cout << "You suffer from accumulated fatigue..."; usleep (2 * wait); } // two if (hugeZombie == true || deathlyZombie == true) { if (luck > 85) { playerSkill = playerSkill +1; zombieSkill = zombieSkill -1; cout << endl << "The zombie tries to grab you."; usleep (wait); cout << endl << "You dodge and knock him down"<< endl; usleep (wait); } if ( luck > 10 && luck < 20 ) { cout << "You lost one of yours tooth!" << endl; usleep (wait); } } // one if (skinnyZombie == true) { //events if (luck < 5 && playerSkill > 12) { zombieSkill = zombieSkill * 2; zombieCount = zombieCount + 1; cout << "Two zombies appeared this time!!" << endl; usleep (wait); } if ( luck > 60 && playerSkill > 40) { playerSkill = playerSkill + 1; cout << "Your hatred for zombies gave you strength." << endl; usleep (wait); } if ( luck > 70 && zombieCount > 10 ) { playerSkill = playerSkill + 1; cout << "The pain you feel increases your focus!!" << endl; usleep (wait); } if ( luck < 3 ) { playerSkill = playerSkill - 2; cout << "The zombie goes into frenzy!!" << endl; usleep (wait); } if ( luck < 10 && zombieSkill > 8 ) { cout << "The zombie bit your ear" << endl; usleep (wait); } if ( playerSkill > zombieSkill ) { skinnyZombie = false; } } if (hugeZombie == true) { if (luck < 30 && playerScore < 50) { cout << endl << "He eats your arm!" << endl; playerSkill = playerSkill -3; usleep (wait); } if (luck > 85 && zombieSkill < 14 && playerScore > 5) { zombieSkill = zombieSkill - 4; cout << "You got a critical hit!!" << endl; usleep (wait); cout << "The zombie became blind!" << endl; usleep (wait); } if (luck > 80 && playerSkill > 20) { zombieSkill = zombieSkill - 2; cout << "You cut off the zombie's hands!!" << endl; usleep (wait); } if (luck < 10) { zombieSkill = zombieSkill + 2; cout << "The zombie kick your face!!" << endl; usleep (wait); } if (luck > 80 && playerSkill < 11) { zombieSkill = zombieSkill - 2; cout << "The zombie grabbet you!" << endl; usleep (wait); cout << "You broke free with a butt in the zombie." << endl; usleep (wait); } if (luck > 98) { playerSkill = playerSkill + 5; cout << "You found a rifle!!" << endl; usleep (wait); } if (playerSkill > zombieSkill) { hugeZombie = false; } } if (deathlyZombie == true) { if (luck < 20 ) { zombieSkill = zombieSkill + 2; playerSkill = playerSkill -2; cout << "The zombie break your leg!!" << endl; usleep (wait); cout << "He threw you on the ground like it was nothing" << endl; usleep (wait); } if (luck > 20 ) { zombieSkill = zombieSkill + 1; cout << "You got away with a blow." << endl; usleep (wait); cout << "He predicted yours movements!!" << endl; usleep (wait); } if (playerSkill > 20 && luck > 80) { playerSkill = playerSkill +2; cout << "You still have not given up hope."; usleep (wait); } if (playerSkill > zombieSkill) { cout << "The deathly warrior zombie will remember you" << endl; deathlyZombie = false; usleep (wait); } } // others if (luck > 50) { if (luck > 85 && zombieSkill < 30) { playerSkill = playerSkill + 1; cout << "You ate some cookies! " << endl; usleep (wait); } if (luck > 99 && playerSkill > 30) { revive = true; cout << "You found a mysterious red ring!!" << endl; usleep (3 * wait); } if (luck > 92 && zombieCount > 10) { zombieSkill = zombieSkill - 2; playerSkill = playerSkill + 1; cout << endl << "You cut off his leg!! " << endl; usleep (wait); cout << "You found some bandage!" << endl; usleep (wait); } } if (luck < 5) { zombieSkill = zombieSkill + 2; cout << "The zombie has a sword!" << endl; usleep (wait); } usleep (wait); //zombie killed the player if (playerSkill < zombieSkill) { playerAlive = false; cout << "You have died." << endl; usleep (5 * wait); if (revive == true) { playerAlive = true; cout << "The mysterious red ring revive you!!" << endl; usleep (wait); cout << "The ring became useless!!" << endl; usleep (wait); } } // player killed the zombie else { if (playerSkill - zombieSkill > 11){ cout << "You blew the zombie's head!"<< endl; playerScore = playerScore + 1; usleep (2 * wait); } if (playerSkill - zombieSkill > 7 && playerSkill - zombieSkill < 12) { cout << "You wasted the zombie!" << endl; playerScore = playerScore + 2; usleep (2 * wait); } if (playerSkill - zombieSkill > 5 && playerSkill - zombieSkill < 8) { cout << "You decapitated the zombie!" << endl; playerScore = playerScore + 3; usleep (2 * wait); } if (playerSkill - zombieSkill > 2 && playerSkill - zombieSkill < 6 ) { cout << "You killed the zombie!" << endl; playerScore = playerScore + 4; usleep (2 * wait); } if (playerSkill > zombieSkill && zombieSkill > 10 && zombieSkill <20) { playerScore = playerScore + 5; usleep (2 * wait); } if (playerSkill > zombieSkill && zombieSkill > 20) { playerScore = playerScore + 20; usleep (2 * wait); } else if (playerSkill - zombieSkill < 3){ cout << "You killed the zombie, but suffered injuries." << endl; playerSkill = playerSkill - 1; usleep (2 * wait); } zombiesKilled++; } cout << endl; usleep (wait * 10); } // end game if (zombiesKilled == zombieCount) { // victory cout << "You have survived the onslaught! \n" << "Congratulations " + playerName + "!" << endl; } else { // lost cout << "You did not survive the zombie war. \n" << "Try to come back stronger next time " + playerName + "!" << endl; } usleep (wait); cout << "Zombies killed: " << zombiesKilled << endl; cout << "Your power this round: " << playerSkill << endl; cout<< "Final score: " << playerScore << endl << endl; cout << "Do you wanna play again? y/n" << endl; cin >> restart; cin.ignore(numeric_limits<streamsize>::max(), '\n'); while ( restart != 'y' || restart != 'n' ) { if ( restart == 'n' ){ again = 'n'; cout << "Thanks for playing!!"; playerAlive = false; return 0; break; } if ( restart == 'y') { playerAlive = true; zombiesKilled = 0; zombieCount = 0; skinnyZombie = false; hugeZombie = false; deathlyZombie = false; cout << "Restart y on"; break; } else { cout << "Please insert a valid character! \n"; cin >> restart; cin.ignore(numeric_limits<streamsize>::max(), '\n'); } } return 0; } } "Porém se ao invés de apenas um caractere o usuário digitar (shampu) uma palavra de 6 letras, 6 mensagens serão exibidas na tela, uma para cada letra que não for 'y' ou 'n'. Como corrigir isso para que não importando o número de caracteres usuário digitar apenas uma mensagem de alerta seja exibida na tela?" Resolveu esse problema porém o loop não está mais funcionando... o if (restart == 'n') continua funcionando, porém o if (restart == 'y') apesar de aparentemente executar os códigos, não está continuando com o loop.
  9. Para mim você não foi muito claro em como usar o cin.ignore(), tive que pesquisar e descobri que era para adicionar ele logo abaixo do "cin >> restart;": cin >> restart; cin.ignore(); Resolveu o problema, agora outra coisa que quero alterar no código é : while ( restart != 'y' || restart != 'n' ) { if ( restart == 'n' ){ again = 'n'; cout << "Thanks for playing!!"; playerAlive = false; return 0; break; } if ( restart == 'y') { playerAlive = true; zombiesKilled = 0; zombieCount = 0; skinnyZombie = false; hugeZombie = false; deathlyZombie = false; break; } else { cout << "Please insert a valid character! \n"; cin >> restart; cin.ignore(); } } Quando o usuário digita qualquer tecla que não seja 'y' ou 'n' o else é ativado exibindo a mensagem "Please insert a valid character!". Porém se ao invés de apenas um caractere o usuário digitar (shampu) uma palavra de 6 letras, 6 mensagens serão exibidas na tela, uma para cada letra que não for 'y' ou 'n'. Como corrigir isso para que não importando o número de caracteres usuário digitar apenas uma mensagem de alerta seja exibida na tela?
  10. Sou iniciante em C++, fiz esse código a caráter de estudo, o programa pede o nome do usuário (playerName) e um número inteiro (zombieCount), e enquanto playerAlive for verdadeiro o zombieCount define o número de rodadas e em cada rodada dois números aleatórios (createZombie, chance) são gerados definindo texto que será mostrado para o usuário e realizando ou não alterações nos int (playerScore, playerSkill, zombieSkill, zombiesKilled).  No fim são exibidos os int (zombiesKilled, playerScore) e a string playerName. E o programa pode reiniciar caso o usuário tecle 'y'. O porém é que quando o programa reinicia ele ignora o "Press [ENTER] to start.". Exibindo ele concatenado com o próximo texto: Press [ENTER] to start.Please enter your name:. Gostaria que quando o loop for feito o programa esperasse o usuário teclar o enter para prosseguir com a aplicação. Suspeito que quando o usuário tecla "y + ENTER]" para reiniciar o programa esse Enter vai parar no char temp, gerando esse erro. #include <iostream> #include <stdlib.h> #include <unistd.h> #include <time.h> #include <windows.h> using namespace std; int wait = 180; int createZombie() { if (rand() % 67 > 65) { return 21; } if (rand() % 67 < 10) return 11; else return rand() %10 + 1; } int chance() { return rand() % 100; } int main() { srand(time(NULL)); char again; // game stats int playerAlive = true; int playerSkill = 9; int playerScore = 1; string playerName = ""; int zombieCount = 0; int zombiesKilled = 0; again = 'y'; int revive = false; char restart; int deathlyZombie = false; int hugeZombie = false; int skinnyZombie = false; while (again == 'y') { // title cout << "Welcome to Zombie War 1.0" << endl << "Press [ENTER] to start."; char temp = 'x'; while (temp != '\n') cin.get(temp); // player name cout << "Please enter your name: "; cin >> playerName; //ask how many zombies cout << "How many zombies do you wish to fight? "; cin >> zombieCount; cout << "Get ready to fight for your life, " << playerName << "!" << endl; // main game loop while (playerAlive && zombiesKilled < zombieCount) { // create a random zombie int zombieSkill = createZombie(); int luck = chance(); // battle sequence if (zombieSkill > 20) { cout << endl << "Here comes a deathly warrior zombie!!!" << endl; deathlyZombie = true; Sleep (wait); } else { if (zombieSkill > 10 && zombieSkill < 20) { cout << endl << "Here comes a huge zombie!" << endl; hugeZombie = true; Sleep (wait); } else { cout << endl << "Here comes zombie " << zombiesKilled + 1 << endl; skinnyZombie = true; Sleep (wait); } } cout << "Fighting"; Sleep (wait / 2); cout << "." ; Sleep (wait / 2); cout << "." ; Sleep (wait / 2); cout << "." << endl; Sleep(2000); //balance if (playerSkill > 50 && luck < 50) { zombieSkill = zombieSkill + 40; playerSkill = playerSkill - 1; cout << "The battle is so hard..." << endl; Sleep (2 * wait); } if (playerSkill > 100 && luck < 20) { zombieSkill = zombieSkill + 90; cout << "You keep fighting, but the end is coming..." << endl; Sleep (2 * wait); } if (zombieCount > 100 && luck < 10) { playerSkill = playerSkill - 10; cout << "You suffer from accumulated fatigue..."; Sleep (2 * wait); } if (skinnyZombie == true) { //events if (luck < 5 && playerSkill > 12) { zombieSkill = zombieSkill * 2; zombieCount = zombieCount + 1; cout << "Two zombies appeared this time!!" << endl; Sleep (wait); } if ( luck > 60 && playerSkill > 40) { playerSkill = playerSkill + 1; cout << "Your hatred for zombies gave you strength." << endl; Sleep (wait); } if ( luck > 70 && zombieCount > 10 ) { playerSkill = playerSkill + 1; cout << "The pain you feel increases your focus!!" << endl; Sleep (wait); } if ( luck < 3 ) { playerSkill = playerSkill - 2; cout << "The zombie goes into frenzy!!" << endl; Sleep (wait); } if ( luck < 10 && zombieSkill > 8 ) { cout << "The zombie bit your ear" << endl; Sleep (wait); } if ( playerSkill > zombieSkill ) { skinnyZombie = false; } } if (hugeZombie == true) { if (luck < 30 && playerScore < 50) { cout << endl << "He eats your arm!" << endl; playerSkill = playerSkill -3; Sleep (wait); } if (luck > 85) { zombieSkill = zombieSkill - 4; cout << "You got a critical hit!!" << endl; Sleep (wait); cout << "The zombie became blind!" << endl; Sleep (wait); } if (luck > 80 && playerSkill > 20) { zombieSkill = zombieSkill - 2; cout << "You cut off the zombie's hands!!" << endl; Sleep (wait); } if (luck < 10) { zombieSkill = zombieSkill + 2; cout << "The zombie kick your face!!" << endl; Sleep (wait); } if (luck > 80 && playerSkill < 11) { zombieSkill = zombieSkill - 2; cout << "The zombie grabbet you!" << endl; Sleep (wait); cout << "You broke free with a butt in the zombie." << endl; Sleep (wait); } if (luck > 98) { playerSkill = playerSkill + 5; cout << "You found a rifle!!" << endl; Sleep (wait); } if (playerSkill > zombieSkill) { hugeZombie = false; } } if (deathlyZombie == true) { if (luck < 20 ) { zombieSkill = zombieSkill + 2; playerSkill = playerSkill -2; cout << "The zombie break your leg!!" << endl; Sleep (wait); cout << "He threw you on the ground like it was nothing" << endl; Sleep (wait); } if (luck > 20 ) { zombieSkill = zombieSkill + 1; cout << "You got away with a blow." << endl; Sleep (wait); cout << "He predicted yours movements!!" << endl; Sleep (wait); } if (playerSkill > 20 && luck > 80) { playerSkill = playerSkill +2; cout << "You still have not given up hope."; Sleep (wait); } if (playerSkill > zombieSkill) { cout << "The deathly warrior zombie will remember you" << endl; deathlyZombie = false; Sleep (wait); } } if (hugeZombie == true || deathlyZombie == true) { if (luck > 85) { playerSkill = playerSkill +1; zombieSkill = zombieSkill -1; cout << endl << "The zombie tries to grab you."; Sleep (wait); cout << endl << "You dodge and knock him down"<< endl; Sleep (wait); } if ( luck > 10 && luck < 20 ) { cout << "You lost one of yours tooth!" << endl; Sleep (wait); } } if (luck > 50) { if (luck > 85 && zombieSkill < 30) { playerSkill = playerSkill + 1; cout << "You ate some cookies! " << endl; Sleep (wait); } if (luck > 99 && playerSkill > 30) { revive = true; cout << "You found a mysterious red ring!!" << endl; Sleep (3 * wait); } if (luck > 92 && zombieCount > 10) { zombieSkill = zombieSkill - 2; playerSkill = playerSkill + 1; cout << endl << "You cut off his leg!! " << endl; Sleep (wait); cout << "You found some bandage!" << endl; Sleep (wait); } } if (luck < 5) { zombieSkill = zombieSkill + 2; cout << "The zombie has a sword!" << endl; Sleep (wait); } Sleep (wait); //zombie killed the player if (playerSkill < zombieSkill) { playerAlive = false; cout << "You have died." << endl; Sleep (5 * wait); if (revive == true) { playerAlive = true; cout << "The mysterious red ring revive you!!" << endl; Sleep (wait); cout << "The ring became useless!!" << endl; Sleep (wait); } } // player killed the zombie else { if (playerSkill - zombieSkill > 11){ cout << "You blew the zombie's head!"<< endl; playerScore = playerScore + 1; Sleep (2 * wait); } if (playerSkill - zombieSkill > 7 && playerSkill - zombieSkill < 12) { cout << "You wasted the zombie!" << endl; playerScore = playerScore + 2; Sleep (2 * wait); } if (playerSkill - zombieSkill > 5 && playerSkill - zombieSkill < { cout << "You decapitated the zombie!" << endl; playerScore = playerScore + 3; Sleep (2 * wait); } if (playerSkill - zombieSkill > 2 && playerSkill - zombieSkill < 6 ) { cout << "You killed the zombie!" << endl; playerScore = playerScore + 4; Sleep (2 * wait); } if (playerSkill > zombieSkill && zombieSkill > 10 && zombieSkill <20) { playerScore = playerScore + 5; Sleep (2 * wait); } if (playerSkill > zombieSkill && zombieSkill > 20) { playerScore = playerScore + 20; Sleep (2 * wait); } else if (playerSkill - zombieSkill < 3){ cout << "You killed the zombie, but suffered injuries." << endl; playerSkill = playerSkill - 1; Sleep (2 * wait); } zombiesKilled++; } cout << endl; Sleep (3000); } // end game if (zombiesKilled == zombieCount) { // victory cout << "You have survived the onslaught! \n" << "Congratulations " + playerName + "!" << endl; } else { // lost cout << "You did not survive the zombie war. \n" << "Try to come back stronger next time " + playerName + "!" << endl; } Sleep (wait); cout << "Zombies killed: " << zombiesKilled << endl; cout << "Your power this round: " << playerSkill << endl; cout<< "Final score: " << playerScore << endl << endl; cout << "Do you wanna play again? y/n" << endl; cin >> restart; while ( restart != 'y' || restart != 'n' ) { if ( restart == 'n' ){ again = 'n'; cout << "Thanks for playing!!"; playerAlive = false; return 0; break; } if ( restart == 'y') { playerAlive = true; zombiesKilled = 0; zombieCount = 0; skinnyZombie = false; hugeZombie = false; deathlyZombie = false; break; } else { cout << "Please insert a valid character! \n"; cin >> restart; } } } return 0; }
  11. Sou iniciante em C++, fiz esse código a caráter de estudo, o programa pede o nome do usuário (playerName) e um número inteiro (zombieCount), e enquanto playerAlive for verdadeiro o zombieCount define o número de rodadas e em cada rodada dois números aleatórios (createZombie, chance) são gerados definindo texto que será mostrado para o usuário e realizando ou não alterações nos int (playerScore, playerSkill, zombieSkill, zombiesKilled). No fim são exibidos os int (zombiesKilled, playerScore) e a string playerName. E o programa pode reiniciar caso o usuário tecle 'y'. Enfim, gostaria de dividir esse código em algumas classes se possível, porém não sei por onde começar... Segue em anexo o código #include <iostream> #include <stdlib.h> #include <unistd.h> #include <time.h> #include <windows.h> using namespace std; int wait = 170; int createZombie() { if (rand() % 67 > 65) { return 21; } if (rand() % 67 < 10) return 11; else return rand() %10 + 1; } int chance() { return rand() % 100; } int main() { srand(time(NULL)); char again; // game stats int playerAlive = true; int playerSkill = 9; int playerScore = 1; string playerName = ""; int zombieCount = 0; int zombiesKilled = 0; again = 'y'; while (again == 'y') { // title cout << "Welcome to Zombie War 1.3" << endl << "Press [ENTER] to start."; cin.get(); // player name cout << "Please enter your name:"; cin >> playerName; //ask how many zombies cout << "How many zombies do you wish to fight? "; cin >> zombieCount; cout << "Get ready to fight for your life, " << playerName << "!" << endl; // main game loop while (playerAlive && zombiesKilled < zombieCount) { // create a random zombie int zombieSkill = createZombie(); int luck = chance(); // battle sequence if (zombieSkill > 20) { cout << endl << "Here comes a warrior deathly zombie!!!" << endl; Sleep (wait); } else { if (zombieSkill > 10 && zombieSkill < 20) { cout << endl << "Here comes a huge zombie!" << endl; Sleep (wait); } else { cout << endl << "Here comes zombie " << zombiesKilled + 1 << endl; Sleep (wait); } } cout << "Fighting..." << endl; Sleep(2000); //droping itens if (luck > 80) { playerSkill = playerSkill + 1; cout << "You ate some cookies! " << endl; Sleep (wait); } if (luck > 98 && zombieSkill > 10) { playerSkill = playerSkill + 5; cout << "You found a rifle!!" << endl; Sleep (wait); } if ( luck > 60 && zombieSkill < 5) { playerSkill = playerSkill + 1; cout << "Your hatred for zombies gave you strength." << endl; Sleep (wait); } if ( luck > 70 && zombieSkill < 11 && playerScore > 3) { playerSkill = playerSkill + 1; cout << "The pain you feel increases your focus!!" << endl; Sleep (wait); } if ( luck < 3 && zombieSkill < 6) { playerSkill = playerSkill - 2; cout << "The zombie goes into frenzy!!" << endl; Sleep (wait); } if (luck < 5) { zombieSkill = zombieSkill + 2; cout << "The zombie has a sword!" << endl; Sleep (wait); } if (luck > 91) { zombieSkill = zombieSkill - 2; playerSkill = playerSkill + 1; cout << endl << "You cut off his leg!! "; Sleep (wait); cout << "You found some bandage!" << endl; } if (zombieSkill > 10 && zombieSkill < 20 && luck < 35) { cout << endl << "He eats your arm!" << endl; playerSkill = playerSkill -1; Sleep (wait); } if (zombieSkill > 10 && zombieSkill < 20 && luck > 85) { playerSkill = playerSkill +1; zombieSkill = zombieSkill -1; cout << endl << "The zombie tries to grab you."; Sleep (wait); cout << endl << "You dodge and knock him down"<< endl; Sleep (wait); } if (zombieSkill > 11 && luck > 85) { zombieSkill = zombieSkill - 4; cout << "You got a critical hit!!" << endl; Sleep (wait); cout << "The zombie became blind!" << endl; Sleep (wait); } if (zombieSkill > 9 && luck > 80 && playerSkill < 11) { zombieSkill = zombieSkill - 2; cout << "The zombie grabbet you!" << endl; Sleep (wait); cout << "You broke free with a butt in the zombie." << endl; Sleep (wait); } if (zombieSkill > 20 && luck < 20 ) { zombieSkill = zombieSkill + 2; cout << "The zombie break your leg!!" << endl; Sleep (wait); cout << "He threw you on the ground like it was nothing" << endl; Sleep (wait); } Sleep (wait); //events if ( luck < 20 ) { cout << "You lost one of yours tooth!" << endl; Sleep (wait); } if ( luck < 10 && zombieSkill < 10) { cout << "The zombie bit your ear" << endl; Sleep (wait); } Sleep (wait); //zombie killed the player if (playerSkill < zombieSkill) { playerAlive = false; cout << "You have died." << endl; } // player killed the zombie else { if (playerSkill - zombieSkill > 11){ cout << "You blew the zombie's head!"<< endl; playerScore = playerScore + 1; Sleep (2 * wait); } if (playerSkill - zombieSkill > 7 && playerSkill - zombieSkill < 12) { cout << "You wasted the zombie!" << endl; playerScore = playerScore + 2; Sleep (2 * wait); } else if (playerSkill - zombieSkill > 5 && playerSkill - zombieSkill < { cout << "You decapitated the zombie!" << endl; playerScore = playerScore + 3; Sleep (2 * wait); } else if (playerSkill - zombieSkill > 0 && playerSkill - zombieSkill < 6 ) { cout << "You killed the zombie!" << endl; playerScore = playerScore + 4; Sleep (2 * wait); } else if (playerSkill > zombieSkill && zombieSkill > 10 && zombieSkill <20) { playerScore = playerScore + 5; Sleep (2 * wait); } else if (playerSkill > zombieSkill && zombieSkill > 20) { playerScore = playerScore + 20; Sleep (2 * wait); } else { cout << "You killed the zombie, but suffered injuries." << endl; playerSkill = playerSkill - 1; Sleep (2 * wait); } zombiesKilled++; } cout << endl; Sleep (3000); } // end game if (zombiesKilled == zombieCount) { // victory cout << "You have survived the onslaught! \n" << "Congratulations " + playerName + "!" << endl; } else { // lost cout << "You did not survive the zombie war. \n" << "Try to come back stronger next time " + playerName + "!" << endl; } Sleep (wait); cout << "Zombies killed: " << zombiesKilled << endl; cout<< "Final score: " << playerScore << endl << endl; cout << "Do you wanna play again? y/n" << endl; cin >> again; if ( again != 'y'){ break; } else { playerAlive = true; zombiesKilled = 0; zombieCount =0; } } return 0; } Game.rar
  12. Sou iniciante em Java, pretendo fazer um programa capaz de efetuar a adição/subtração/multiplicação/divisão de dois números fornecidos pelo usuário conforme a operação desejada. Na parte em que o usuário digita o operador, optei por guardá-lo em uma string para tentar validar com "if". // Quest1.java exibe um número que o usuário digitar na tela import java.util.Scanner; public class Quest2 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Scanner scanner2 = new Scanner(System.in); Scanner scanner3 = new Scanner (System.in); //Entrada System.out.println("Seja Bem vindo ao Java Calculator"); System.out.println("Digite um número"); double n1 = scanner.nextDouble(); System.out.println("Digite outro número"); double n2 = scanner2.nextDouble(); //Processamento double r1 = n1 + n2; double r2 = n1 - n2; double r3 = n1 * n2; double r4 = n1 / n2; System.out.println("Agora digite um operador correspondente a operação desejada: " + "Adição +, Subtração -, Multiplicação *, Divisão /"); String op1 = scanner3.nextLine(); //Saída if ( op1 == "+") System.out.println("A soma deles é :" + r1 ); if (op1 == "/") System.out.println("O quociente deles é :" + r4 ); if (op1 == "*") System.out.println("O produto deles é :" + r3 ); if (op1 == "-") System.out.println("A subtração deles é :" + r2 ); else { System.out.println("Digite um operador válido!"); } Porém na saída apenas else é exibida, o programa não foi capaz de reconhecer que a string recebida estava igual. Alguém alma caridosa pode me socorrer?
  13. Passei a usar o eclipse e o código rodou de boas. Fiz as alterações que precisava no main e no GradeBook.cpp, praticamente courseTutor é courseName com outro nome. Agradeço por ter sanado minhas dúvidas. Que Jesus esteja com você. Main // Figura 3.17: fig03_17.cpp // Cria e manipula um objeto GradeBook; ilustra a validação. using namespace std; #include <iostream> #include "GradeBook.hpp" // inclui a definição de classe GradeBook // a função main inicia a execução do programa int main() { // cria dois objetos GradeBook; // nome inicial de curso de gradeBook1 é muito longo GradeBook *gradeBook1 = new GradeBook( "CS101 Introduction to Programming in C++", "Matheo Ruan" ); GradeBook *gradeBook2 = new GradeBook( "CS102 C++ Data Structures","Michelangelo Lindo" ); gradeBook1->displayMessage(); gradeBook2->displayMessage(); // exibe courseName de cada GradeBook cout << "\ngradeBook1's initial course name is:" << gradeBook1->getCourseName() << "\ngradeBook2's initial course name is: " << gradeBook2->getCourseName() << "\ngradeBook1's initial tutor name is: " << gradeBook1->getCourseTutor() << "\ngradeBook2's initial tutor name is: " << gradeBook2->getCourseTutor() << endl; // modifica courseName do myGradeBook (com uma string de comprimento válido) gradeBook1->setCourseName( "CS101 C++ Programming" ); gradeBook2->setCourseTutor( "Michelangelo"); // exibe courseName de cada GradeBook cout << "\ngradeBook1's course name is: " << gradeBook1->getCourseName() << "\n This course is present by: " << gradeBook1->getCourseTutor() << "\ngradeBook2's course name is: " << gradeBook2->getCourseName() << "\n This course is present by: " << gradeBook2->getCourseTutor() << endl; delete gradeBook1; delete gradeBook2; return 0; // indica terminação bem-sucedida } // fim de main // Figura 3.16: GradeBook.cpp // Implementações das definições de função-membro de GradeBook. // A função setCourseName realiza a validação. #include <iostream> #include <string> using std::cout; using std::endl; #include "GradeBook.hpp" // inclui a definição de classe GradeBook // construtor inicializa courseName com String fornecido como argumento GradeBook::GradeBook() { } GradeBook::GradeBook ( string name, string tutor ) // fim do construtor GradeBook : courseName (name), courseTutor (tutor) { setCourseName (name); setCourseTutor (tutor); } // função que configura o nome do curso; // assegura que o nome do curso tenha no máximo 25 caracteres void GradeBook::setCourseName( string name ) { if ( name.length() <= 25 ) // se o nome tiver 25 ou menos caracteres this->courseName = name; // armazena o nome do curso no objeto if ( name.length() > 25 ) // se o nome tiver mais de 25 caracteres { // configura courseName como os primeiros 25 caracteres do parâmetro name this->courseName = name.substr( 0, 25 ); // inicia em 0, comprimento de 25 cout << "Name \'" << name << "\" exceeds maximum length (25).\n" << "Limiting courseName to first 25 characters.\n" << endl; } // fim do if } // fim da função setCourseName // função para obter o nome do curso string GradeBook::getCourseName() { return this->courseName; // retorna courseName do objeto } // fim da função getCourseName void GradeBook::setCourseTutor (string tutor) { if (tutor.length() <= 15 ) this->courseTutor = tutor; if (tutor.length() > 15 ) { this->courseTutor = tutor.substr(0 , 15); cout << endl; cout << "Name \"" << tutor << "\" exceeds maximum length 15.\n" << "Limiting courseTutor to first 15 characters. \n" << endl; } } string GradeBook::getCourseTutor() { return courseTutor; } void GradeBook::displayMessage() { // chama getCourseName para obter o courseName cout << "Welcome to the grade book for\n" << getCourseName() << "!" << endl; // exibe uma mensagem de boas-vindas para o usuário GradeBook // chama getCourseTutor para obter o courseTutor cout << "This course is presented by: "<< getCourseTutor() << "!" << endl; }; // fim da função displayMessage // Figura 3.15: GradeBook.hpp // Definição de classe GradeBook apresenta a interface public da // classe. Definições de função-membro aparecem em GradeBook.cpp. #pragma once #include <string> // o programa utiliza classe de string padrão do C++ using std::string; // definição da classe GradeBook class GradeBook { public: GradeBook( ); // construtor que inicializa um objeto GradeBook GradeBook (string name, string tutor); void setCourseName( string name ); // função que configura o nome do curso void setCourseTutor( string tutor ); string getCourseName(); // função que obtém o nome do curso string getCourseTutor(); void displayMessage(); // função que exibe uma mensagem de boas-vindas private: string courseName; // nome do curso para esse GradeBook string courseTutor; string name; string tutor; }; // fim da classe GradeBook
  14. Desculpe a demora, agradeço a ajuda, fiquei tão preocupado em adiciona novos parâmetros que esqueci de chama-los na função main, o código foi bastante explicador para mim, gostaria de pedir explicações sobre o uso de "->" ao invés do "." e sobre a declaração do construtor no reader. O código não rodou no Dev c++ apresentando o erro :C:\Users\Gatão\Documents\collect2.exe [Error] ld returned 1 exit status

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×