Nada

LÖSNING TILL DATALOGIÖVNING 3

Minnesfack behövs tydligen för sju partibeteckningar och lika många röstetal. Eftersom party ska vara konstant passar det bra att ha den högst upp, dvs globalt. Då måste man ange static, annars existerar den inte från körningens början. För votes är det en smaksak. Här väljer vi att ha den lokal i main. Det är smart att inte sätta votes=new int[7] utan i stället låta den anpassa sej efter party.

För att få heltaliga procentangivelser använder vi att / mellan heltal ger ett heltalssvar (och kapar decimalerna).

class Val1                                                         { 
  static String[] party={"m ","fp","kd","c ","mp","s ","v "}       ;
  public static void main(String[] args)                           {
    int n=party.length                                             ;
    int[] votes = new int[n]                                       ;
    for(int i=0;i<n;i++) votes[i]=0                                ;
    System.out.println("Mata in valkretsens röstantal!")           ;
    for(int i=0;i<n;i++)                                           {
      System.out.print(party[i]+": ")                              ;
      votes[i]+=Mio.GetInt()                                       ;}
    int totalvotes=0                                               ;
    for(int i=0;i<n;i++) totalvotes+=votes[i]                      ;
    System.out.println(totalvotes+" röster fördelade så här:")     ;
    for(int i=0;i<n;i++)                                           {
      int p=100*votes[i]/totalvotes                                ;
      System.out.println(party[i]+": "+votes[i]+" ("+p+"%)")       ;}}}
Globaldeklarationen av n är endast för att man ska slippa att skriva votes.length på en massa ställen. Argumentet votes svarar i zero och update mot parametern v. Tänk på att v är en lokal variabel och att den genom anropet fås att peka på samma vektor som votes.
class Val2                                                         { 
  static String[] party={"m ","fp","kd","c ","mp","s ","v "}       ;
  static int n=party.length                                        ;
  static void zero(int[] v)                                        {
    for(int i=0;i<n;i++) v[i]=0                                    ;}
  static void update(int[] v)                                      {
    System.out.println("Mata in valkretsens röstantal!")           ;
    for(int i=0;i<n;i++)                                           {
      System.out.print(party[i]+": ")                              ;
      v[i]+=Mio.GetInt()                                           ;}}
  static void report(int[] votes)                                  {
    int totalvotes=0                                               ;
    for(int i=0;i<n;i++) totalvotes+=votes[i]                      ;
    System.out.println(totalvotes+" röster fördelade så här:")     ;
    for(int i=0;i<n;i++)                                           {
      int p=100*votes[i]/totalvotes                                ;
      System.out.println(party[i]+": "+votes[i]+" ("+p+"%)")       ;}}
  public static void main(String[] args)                           {
    int[] votes = new int[n]                                       ;
    zero(votes)                                                    ;
    while(true)                                                    {
      update(votes)                                                ;
      report(votes)                                                ;}}}
Problemet med att olika stora tal tar olika stor plats löses oväntat enkelt så här. Man skriver en blanktext med just så många positioner som man vill att talet ska ta på skärmen. Eftersom word.substring(7) klipper bort sju tecken ur word kommer vår lösning att fungera. Lägg märke till tricket ""+votes[i] för att skapa en text med röstetalet.

I labb 2 ska alla ha gjort en writeStars, och den återanvänder vi. class Val3 är som ovan men med förbättrad report.

  - - -
  static void report(int[] votes)                                  {
    int totalvotes=0                                               ;
    for(int i=0;i<n;i++) totalvotes+=votes[i]                      ;
    System.out.println(totalvotes+" röster fördelade så här:")     ;
    for(int i=0;i<n;i++)                                           {
      int p=100*votes[i]/totalvotes                                ;
      String s=""+votes[i]                                         ;
      s="       ".substring(s.length())+s                          ;
      System.out.print(party[i]+": "+s+"    ")                     ;
      Stars5.writeStars(p)                                         ;}}